记住用户名密码
自己封装一个加锁的类<?php// 增加redis锁 避免同时下单class Rlock { // $scene 为场景值 随意填写 protected $lockId;// 记录加锁的客户端id public function __construct() { $redis = new Redis(); $redis->connect('127.0.0.1',6379); $redis->auth('123456'); //密码验证 $this->redis = $redis; } // 加锁 public function lock($scene){ $res = false; $time = 5; while($time-- >0){ // 加锁 普通盲盒场景下 $valule = session_create_id();// 生成不重复的字符串 $res = $this->redis->set($scene,$valule,["NX","EX"=>5]); if($res){ // 加锁成功 记录下当前的value值 $this->lockId[$scene] = $valule; break;// 加锁成功 跳出循环 } } return $res; } // 解锁 public function unLock($scene){ // 能够删除自己的锁,不应该删除别人的锁 if($this->lockId[$scene]){ $value = $this->redis->get($scene); // 从redis当中获取value值 $id = $this->lockId[$scene];// 当前请求的记录值 // 从redis当中获取的id 跟当前请求记录的id是否是同一个 if($value == $id){ return $this->redis->del($scene); // 删除锁 } } return false; } }
然后进行调用加锁和解锁的方法
目前有 0 条留言 其中:访客:0 条, 博主:0 条