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

  • 互斥性:任意时刻只能有一个客户端获取锁
  • 安全性:锁只能被持有该锁的客户端删除
  • 死锁:获取锁的客户端因为意外宕机未能释放锁,其他客户端再也无法获取到该锁导致死锁
  • 容错:宕机后客户端仍然可以获取、释放锁

SETNX key value:如果 key 不存在,即创建并赋值;

时间复杂度O(1);

返回值设置:设置成功返回1,设置失败返回0;

如何解决 SETNX 长期有效的问题?

EXPIRE key seconds

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

RedisService redisService = SpringUtils.getBean(RedisService.class);long status = redisService.setnx(key,"1");if(status == 1){redisService.expire(key,expire);//执行独占资源逻辑
    do0cuppiedWork();
}

缺点:原子性得不到满足

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

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

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

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

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

-SET操作完成时,返回OK,否则返回nil

大量的 key 同时过期的注意事项

-集中过期,由于清除大量的 key 很耗时,会出现短暂的卡顿现象

-解决方案:在设置 key 的过期时间的时候,给每个 key 加上随机值

转载于:https://www.cnblogs.com/Roni-i/p/10796371.html

如何通过 Redis 实现分布式锁相关推荐

  1. 基于 Redis 实现分布式锁思考

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/xuan_lu/article/details/111600302 分布式锁 基于redis实 ...

  2. Redis实现分布式锁的深入探究

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.分布式锁简介 锁 是一种用来解决多个执行线程 访问共享资源 错 ...

  3. nx set 怎么实现的原子性_基于Redis的分布式锁实现

    前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问 ...

  4. Zookeeper和Redis实现分布式锁,附我的可靠性分析

    作者:今天你敲代码了吗 链接:https://www.jianshu.com/p/b6953745e341 在分布式系统中,为保证同一时间只有一个客户端可以对共享资源进行操作,需要对共享资源加锁来实现 ...

  5. Redis——由分布式锁造成的重大事故

    作者:浪漫先生 原文:juejin.im/post/6854573212831842311 前言 基于Redis使用分布式锁在当今已经不是什么新鲜事了.本篇文章主要是基于我们实际项目中因为redis分 ...

  6. 基于Redis的分布式锁和Redlock算法

    来自:后端技术指南针 1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手 ...

  7. 《Redis官方文档》用Redis构建分布式锁

    <Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...

  8. 《Redis官方文档》用Redis构建分布式锁(悲观锁)

    2019独角兽企业重金招聘Python工程师标准>>> **用Redis构建分布式锁 ** 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章 ...

  9. redis 实现分布式锁

    为什么80%的码农都做不了架构师?>>>    redis 实现分布式锁 伪代码 lock(){if(jedis.setNx("key",timestamp)){ ...

  10. redis系列:基于redis的分布式锁

    一.介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分为两部分,一个是单机环境, ...

最新文章

  1. OpenCV(二十)模板匹配
  2. 如何优化网站结构才促使网站排名“节节高”?
  3. webpack vue app.js自动注入页面.为app.js增加随机参数
  4. Mckinsey insights 2
  5. 【收藏】Kubernetes(十七) 基于NFS的动态存储申请
  6. 单片机c语言 openssl,Linux下C语言使用openssl库进行加密
  7. L3-2 还原文件 (30 分)
  8. Modelsim-altera 仿真 顶层原理图的解决办法
  9. RHEL6配置yum源为网易镜像
  10. matlab获取图片上的字,Matlab读取图片代码
  11. XP系统计算机桌面图标不见,xp系统桌面图标不显示的详细方法
  12. WPF流程图制作系列相关基础一
  13. Python之禅 的翻译和解释
  14. 字体图标 fa fa html5,前端引入icon的方法(iconfont,fontawesome)
  15. 软件架构---微核架构
  16. python颜色填充代码_python中如何给图形填充颜色
  17. 计算机windows7连接打印机
  18. 如何用Matlab画一个数学动态GIF
  19. tableau复合图形示例:三张图形描述一张成绩单
  20. C# 操作 Excel 单元格格式设置

热门文章

  1. 内置函数的数据聚合NumpyPandas
  2. 论文计算机在管理会计中的应用,浅论管理会计在企业中的应用
  3. 谷粒商城doc文档_谷粒学院项目分享全栈开发入门必备(资料齐全)
  4. 计算机网络ip地址博客,计算机网络中,这些IP地址你知道吗?
  5. 微型计算机主要特点,微型计算机数字控制的主要特点.ppt
  6. 怎样开图纸便宜_在县城开一家儿童乐园怎么样?开多大面积合适?投资需要多少钱?...
  7. 正则匹配图片地址 php,php正则匹配图片地址
  8. matlab中x.^2与x^2有什么区别?
  9. 深度学习之卷积神经网络CNN及tensorflow代码实现示例详细介绍(转载)
  10. 杨晓峰-Java核心技术-9 HashMap Hashtable TreeMap MD