laravel redis锁如何优化下
redis锁我加上了,
$script = “return redis.call(‘SET’, KEYS[1], ARGV[1], ‘NX’, ‘EX’, ARGV[2])”;
$lock = Redis::eval($script, 1,$lockkey, $lockval, 20);
当我现在有个问题,假设我有10000张票,很多人我加这个redis锁,每次就只能有一个人执行后面的抢票流程,能不能开始一段时间能很多人一起抢票,到最后100张的时候,因为要控制票数再加上redis锁,但此时最初的时间如何保证不会去重复写数据什么的?
我这样做感觉效率太慢了,有没有好的方案呢?
我的想法是 10000張票 可以給redis 設置一個長度為10000的list 裡面的值隨便是啥 默認給1就好了 然後從這個list裡面 用redis 的 lpop 取值並刪除第一個元素 如果為nil 就是已經搶完了 如果拿到了值 就往下面走 如果失敗了 看是否是沒有了庫存 如果沒有庫存 可以直接刪除list 如果是業務邏輯出錯 或數據庫修改失敗的情況 就rpush 給list添加一個值 瞎想的....