记录Redis实现分布式锁必须遵循原则

   

一般在分布式项目中,如何保证数据的完整性以及安全性是我们必须要考虑的,基于这个原因,就出现了分布式锁.一般提到锁 基本就是为了处理数据的安全问题.今天记录下关于分布式锁.

       分布式锁一般有三种实现方式: 1.数据库的乐观锁 2.Redis实现分布式锁 3.Zookeeper的分布式锁.

今天主要是讲述第二种,基于Redis实现分布式锁

一个分布式锁是否可用,它的前提需要以下四个条件:

      1.无论什么时候锁只能是一个客户端拥有(互斥性)

      2.无论什么时候不能出现死锁,这个时候需要在某偶一个客户端突然崩溃,而本身的锁要被释放.

      3.要有容错性.

      4.专一性.加锁与解锁必须针对一个客户端,不能唐朝的官斩宋朝的人.

使用Redis分布式锁 需要理解五个参数

 private static final String LOCK_SUCCESS = "OK";
    private static final String SET_IF_NOT_EXIST = "NX";
    private static final String SET_WITH_EXPIRE_TIME = "PX";

    /**
     * 尝试获取分布式锁
     * @param jedis Redis客户端
     * @param Key 锁
     * @param requestId 请求标识
     * @param expireTime 超期时间
     * @return 是否获取成功
     */

 public static boolean Lock(Jedis jedis, String Key, String value, int 

expireTime) {

String result = jedis.set(Key, value, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);

        if (LOCK_SUCCESS.equals(result)) {
            return true;
        }
        return false;

    }
}

参数解释:

          key: 我们使用key当锁,因为这个key是唯一的.

         value:  一般这个传来的是一个客户端的标识id值, 目的就是为了分清楚是哪个客户端请求而加上的锁

        SET IF NOT EXIST:  即当key不存在时,我们进行set操作;若key已经存在,则不做任何操作

       SET_WITH_EXPIRE_TIME:  我们要给这个key加一个过期时间的设置

       expireTime:   SET_WITH_EXPIRE_TIME参数相呼应,代表key的过期时间

 

这五个参数就可以将我们提出的四个条件全部满足.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值