关于redis分布式锁

项目中有计划任务的话, 可以添加redis的分布式锁setnx和 expire去限制, 防止多服务器中任务冲突/重复跑等情况

Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。

返回值

设置成功,返回 1 。 设置失败,返回 0 。

Redis Expire 命令用于设置 key 的过期时间,key 过期后将不再可用。单位以秒计。

返回值

设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。

public function handle()
{
    Log::info($this->description . ' start ');
    $t = time();
    $t = date('Hi', $t);
    $manage = GymShopsRestMan::where(['id' => 1])->first();

    $redis = Redis::connection();
    $rest_no_running_key = $this->signature . ':running';

    if ($redis->setnx($rest_no_running_key, 123) === 1) {

        $expire_res = $redis->expire($rest_no_running_key, env('GYM_CREATE_ORDER_NO_RUNNING_TIMES', 1200));
        if ($expire_res !== 1) goto expire_fail;


        if ($manage->rest_end_time < $t && $manage->shop_status != 0) {

            GymShopsRestManage::where(['id' => 1])->update(['shop_status' => 0]);

        }


        expire_fail:
        $redis->del($rest_no_running_key);


    }


    Log::info($this->description . ' stop ');
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值