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

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

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. 网管日志-06.08.18
  2. 七年程序员生涯,我学到的重要六课
  3. 使用docker安装的mysql如何让其他机器访问
  4. SecureCRT 遇到一个致命的错误且必须关闭
  5. 深度学习(part1)--机器学习及深度学习基础
  6. 深入react技术栈(11):样式处理
  7. 刷机提示图像和设备不匹配_安卓5.0升级失败如何解决 安卓5.0刷机失败解决方法介绍【教程】...
  8. 怎么屏蔽还有照片_朋友圈该不该屏蔽父母?网友:发个自拍还被嫌丑,我能怎么办.........
  9. 201632位matlab下载_Matlab R2016a x32|matlab 2016a 32位版下载 完全免费版 - 121下载站
  10. 机房巨佬的随机名称生成器
  11. 英语常见词根词缀大全(二)
  12. win7 系统激活工具 亲测可行
  13. 内存卡格式化的原因有哪些 内存卡格式化怎么恢复
  14. 国内好用的邮箱评选,电子邮箱大全有你的吗?
  15. 用esp8266做一个网络时钟
  16. tplinkwr710n改无线打印服务器,TP-Link TL-WR710N V1无线路由器AP模式设置
  17. MicroStrain 3DM-GX3-25 ROS 开发
  18. bootpdf下载 spring_SpringBoot教程 PDF 下载
  19. 使用 Scrapy-Redis 进行分布式爬取
  20. python将大文件拆分成多个小文件,同时对各小文件处理以节省时间

热门文章

  1. 【数学建模】2021年美赛C题思路(预测模型和图像识别)【含Matlab源码 245期】
  2. 如何更新计算机的flash player,如何在win7电脑中Adobe Flash Player自动更新?
  3. 自动化机器人 rpa_机器人过程自动化和机器人的出现
  4. 计算机模拟学,深度学习是让计算机模拟
  5. insert同时添加两张表_Q语言——表的高级查询语言(一)
  6. Java二十三设计模式之-----桥接模式
  7. 在WSUS 3.0的环境中,部分客户机没有向WSUS服务器更新状态,该如何解决?
  8. zabbix重点笔记
  9. Hbase与传统关系型数据库对比
  10. Centos6.5安装tocmat7 配置以及优化