1、redis中使用WATCH实现锁机制,是最次之的方式。WATCH只会在数据被其他客户端抢先修改了的情况下,“通知”执行了这个命令的客户端,而不会阻止其他客户端对数据进行修改。此类锁成为“乐观锁”

2、redis提供SETNX命令确实具有基本的加锁功能,但他的功能并不完整,并且也不具备分布式锁常见的一些高级特性。

3、自己构建分布式锁。

4、锁不正确运行的症状

  1、持有锁的进程因为操作时间过长而导致锁自动释放,但进程本身并不知晓,甚至还可能会错误的释放了其他进程持有的锁。

  2、一个持有锁并打算执行长时间操作的进程已经崩溃,但其他想要获取锁的进程并不知道哪个进程持有锁,也无法检测出持有锁的进程是否崩溃,只能白白的浪费时间等待锁被释放

  3、在一个进程持有的锁过期之后,其他多个进程同时尝试去获取锁,并且都获得了锁。

  4、多个进程获得了同一个锁,而每个进程都以为自己是唯一获得锁的进程。

  因为Redis在最新的硬件上可以每秒执行100 000 个操作,甚至 225 000 个操作,所以尽管上面提到的问题出现的几率只有万分之一,但在高负载的情况下还是可能出现

5、判断应该锁住整个数据结构还是应该锁住结构中一小部分,是一件非常简单的事情,但是,需要锁住一小部分数据不止一份的时候,有或者需要锁住结构中的多个部分的时候,这种判断就会更加困难。多个细粒度锁也有引发死锁的危险,导致程序无法运行。

转载于:https://www.cnblogs.com/jiangtao1218/p/9349627.html

redis分布式锁-基本概念与实现方式对比相关推荐

  1. Redis分布式锁的概念

    作者:bravo1988 链接:https://www.zhihu.com/question/317687988/answer/1715863550 来源:知乎 著作权归作者所有.商业转载请联系作者获 ...

  2. 集群部署中解决定时任务重复执行的问题-redis分布式锁应用

    背景描述 有小伙伴私信我,关于存在定时任务的项目在集群环境下部署如何解决重复执行的问题,PS:定时任务没有单独拆分. 概述:之前的项目都是单机器部署,所以定时任务不会重复消费,只会执行一次.而在集群环 ...

  3. **Java有哪些悲观锁的实现_80% 人不知道的 Redis 分布式锁的正确实现方式(Java 版)...

    点击上方"小哈学Java",选择"星标" 回复"资源",领取全网最火的Java核心知识总结 来源:http://sina.lt/gfZU 前 ...

  4. Redis分布式锁【正确实现方式】

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  5. Redis分布式锁的正确实现方式(Java版)

    转自:https://wudashan.cn/2017/10/23/Redis-Distributed-Lock-Implement/ 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于 ...

  6. redis 分布式锁的实现方式

    情景如下: 我们有一批任务需要由多个分布式线程处理,每个任务都有一个taskId,为了保证每个任务只被执行一次,在工作线程执行任务之前,先获取该任务的锁,锁的key可以为taskId 方式1:set( ...

  7. Redis分布式锁的正确实现方式

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  8. Java版基于Redis分布式锁的实现方式

    一.什么是分布式锁? 要介绍分布式锁,首先要提到分布式锁相对应的线程锁和进程锁, 线程锁:组要是给方法.代码块加锁,当方法或者代码块使用锁时,在同一时刻只有一个线程可以执行该方法或者代码块,线程锁只在 ...

  9. Redis分布式锁的正确打开方式

    Redis分布式锁的正确打开方式 为什么需要分布式锁 分布式锁原理 单机锁和分布式锁的联系与区别 Redis分布式锁的演进史 第一版 SETNX 如何避免死锁 解决锁被别人释放 锁过期时间不好评估 R ...

最新文章

  1. python经典程序练习题-99道经典练习题助你全面掌握python基础知识,附技巧答案...
  2. 审计日志删除 oracle,oracle audit,怎么审计ORACLE日志
  3. linux浏览器打开pdf文件,linux下的pdf浏览器(可加批注)
  4. Java 9 揭秘(9. 打破模块封装)
  5. LeetCode-76: 最小覆盖子串
  6. Paypal如何实现循环扣款(订阅)?
  7. java代码上传到私服,maven上传源码到私服(示例代码)
  8. 骑士人才系统(qscms)微信公众号配置教程
  9. 计算机组成原理:系统总线IO设备
  10. 我来告诉你,草根程序员如何进入BAT
  11. 链家网页爬虫_链家房源爬虫(含源码)
  12. javascript 基本用法
  13. QT的OpenGL进行模型的3D展示
  14. 用新华字典来彻底解释清:数据库索引到底是什么
  15. mSystems:土壤化学计量特性影响土壤C、N和P循环微生物丰度及其对全球变化的抵抗力(一作解读)...
  16. c ||和,if判断语句
  17. DSP视频教程第2期:系统介绍ARM DSP数字信号处理库以及超简单的移植方法分享(2022-01-27)
  18. python0.618方法
  19. 【图像融合】基于matlab对比度增强结合多尺度边缘保持分解红外与可见光图像融合【含Matlab源码 1886期】
  20. 来自中国的两支道德黑客团队在俄罗斯最大的网络安全节上参加了 Standoff 11 网络战!

热门文章

  1. Codeforces 1016F Road Projects
  2. Spring AOP通知实例 – Advice
  3. 基于吉日嘎拉的通用权限管理WebForm版扩展:字典选项管理和缓存管理
  4. jquery 3D分页翻转滑块
  5. 实践重于理论——创建一个监控程序探测WCF的并发处理机制
  6. 杭电多校(二)2019.7.24--暑假集训
  7. Windos消息驱动
  8. memset与malloc性能测试(转)
  9. CentOS 7 + MySql 中文乱码解决方案
  10. Sql Server编程