美文网首页
1.Redis分布式锁

1.Redis分布式锁

作者: 未知的证明 | 来源:发表于2019-05-05 19:18 被阅读0次

首先要了解:分布式锁需要解决的问题

1.互斥性
2.安全性
3.死锁
4.容错

方法一:

SETNX key value:如果key不存在,则创建并赋值
时间复杂度O(1),返回值:设置成功返回1 失败返回0(locknx已经存在无法更改,操作是原子的)

image
image.png

在执行某段代码时,先尝试使用SETNX对某个key设值,如果成功则没有其他线程占用该资源,如果失败则等待到SETNX成功。

但是如果SETNX某个key,则这个key就长久存在,如何解决SETNX长期有效的问题?

EXPIRE key seconds

设置key的生存时间,当key过期时(生存时间为0)会被自动删除

image

代码逻辑(伪代码)如下:

image

EXPIRE缺点:原子性得不到满足(当setnx执行成功后挂掉,未来得及执行expire,会导致key一直被占用,其他线程永远无法执行)
方法二:

set key value [EX seconds] [PX milliseconds] [NX|XX]


image.png

EX seconds:设置键的过期时间为second秒

PX milliseconds:设置键的过期时间为 milliseconds毫秒

NX:只在键不存在时,才对键进行设置操作

XX:只在键已经存在时,才对键进行设置操作

SET操作成功完成时,返回OK,否则返回nil
如果有大量的key同时过期的时候,由于清除大量的key很耗时,会出现短暂的卡顿现象:在设置key的过期时间的时候,给每个key设置随机值来避免卡顿现象发生。

相关文章

  • Redis分布式锁

    1.Redis分布式锁概述 除了Redis,还能使用什么作为分布式锁? 利用Redis的setnx(SET if ...

  • 14 Spring Schedule + Redis分布式锁构建

    1.Redis分布式锁流程图 2. Redis分布式锁优化版流程图 3. Redis分布式锁常用的几个命令 set...

  • redis

    1.redis 分布式锁及问题 (1)实现: 加锁:setnx、解锁:del、锁超时:expire (2)可能出现...

  • 1.Redis分布式锁

    首先要了解:分布式锁需要解决的问题 1.互斥性2.安全性3.死锁4.容错 方法一: SETNX key value...

  • redis面试大全

    1.redis用途 数据缓存,特别是热点数据,减少数据库压力手机验证码,失效时间来设置验证码的过期时间;分布式锁,...

  • 分布式锁

    为什么要用分布式锁 数据库乐观锁redis分布式锁zookeeper分布式锁 使用分布式锁的场景 实现分布式锁的方...

  • 什么是分布式锁?几种分布式锁分别是怎么实现的?

    一、什么是分布式锁: 1、什么是分布式锁: 分布式锁,即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资...

  • 4:Redis 分布式锁 (文末有项目连接)

    1:什么是缓存分布式锁 2:分布式锁的关键代码 3:业务代码使用分布式缓存锁 4:业务代码使用分布式缓存锁 5:测...

  • 锁(2)-- 分布式锁

    前言: 锁分3种:java锁、分布式锁、DB锁 分布式锁的几种实现方式 目前几乎很多大型网站及应用都是分布式部署...

  • java锁的概念

    参考文档探究分布式并发锁并发编程-锁的发展和主流分布式锁比较总结从构建分布式秒杀系统聊聊分布式锁探索并发编程(六)...

网友评论

      本文标题:1.Redis分布式锁

      本文链接:https://www.haomeiwen.com/subject/pgtkoqtx.html