当前位置: 首页 > news >正文

Redis 线程控制 问题

前言


 相关系列

  • 《Redis & 目录》
  • 《Redis & 线程控制 & 源码》
  • 《Redis & 线程控制 & 总结》
  • 《Redis & 线程控制 & 问题》
     

 参考文献

  • 《Redis分布式锁》
     
     

Redis如何实现分布式锁?


    Redis是单进程单线程的,指令执行时不会出现并发问题,因此便可通过{SETNX}指令来设置安全的分布式锁标记。{SETNX}指令的作用是在指定键不存在的情况下保存键/值,并返回0/1来表示失败/成功。而在指定键/值成功保存的情况下,由于其它{SETNX}指令不可能再保存相同键,因此成功执行{SETNX}指令的客户端就相当于持有了锁,并可以此实现对目标资源的安全访问。而在结束对目标资源的访问后,成功执行{SETNX}指令的客户端还需要调用{DEL}指令将指定键/值删除,这意味着其已经完成了解锁。

    为了避免死锁问题…客户端在调用{SETNX}指令“加锁”最好可以设置合理的过期时间,从而保证锁不会因为主观/客观的原因而无法解开。
 
 

什么是红锁?


    我们通常所说的红锁是指由Redisson在早期版本中提供的一种在Redis集群环境中使用的锁,相比普通的锁而言其具备更高的容错性。我们知道锁信息是存在丢失可能的,因为无论是持久化机制/主从同步都无法保证数据完全不丢失,故而程序就可能因为锁的异常解锁而出现异常/并发问题,因此Redisson便设计&提供了红锁来避免这一点。

    红锁的思想是同时使用多锁来保护单一资源,这样一来即使少数锁信息因为各种原因而丢失,其余依然存在的锁信息也依然能保证锁功能的正常使用。可以很快发现的是红锁在单机/主从部署的Redis中是没有多少使用意义的,因为在这种情况下无论使用了多少锁去组成红锁,其锁信息也都会被统一保存在单个实例/主机中,因为信息一旦丢失也往往是全局性的。但在集群中就完全不一样的,有这些锁信息会被分配到不同的主节点中保存,因此锁信息丢失也仅限于宕机主节点所包含的部分。

    随着版本的迭代,作为单一锁类型存在的红锁其实已经被淘汰了,如今的红锁已经转变任意类型锁为通用锁特性。如此改变的原因正如上文所说是为了增强红锁的使用范围,毕竟绝大部分公司的业务体量都无需使用Redis集群来支撑。红锁特性的具体表现是:当线程试图加/解锁任意类型的锁时,如果其操作的目标Redis实例存在任意形式(主从/集群)的从机,那么其只有在主机将锁信息同步至从机后才会返回成功。如此一来其不但维持了足够的安全性;还减少了锁信息的内存开销;当然最重要的还是将红锁的使用范围从集群层面拓展到了主从层面。

http://www.lryc.cn/news/473368.html

相关文章:

  • 005 IP地址的分类
  • Java 并发工具(12/30)
  • filebeat+elasticsearch+kibana日志分析
  • Google Recaptcha V2 简单使用
  • Rust编程中的浮点数比较
  • java访问华为网管软件iMaster NCE的北向接口
  • UV紫外相机
  • 第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会在广西桂林开幕
  • Effective Java(第三版) _ 创建和销毁对象
  • 你的EA无法运行的几种常见原因
  • 通过自定义指令实现图片懒加载
  • QT项目-仿QQ聊天(带宠物系统)
  • 前端算法题:3216. 交换后字典序最小的字符串(力扣每日一题)
  • 29.1 时序监控和日志监控的对比,分析日志监控的核心诉求
  • git仓库分支
  • 多模态机器学习在精准健康中的应用--九五小庞
  • 提升网站速度与性能优化的有效策略与实践
  • MySQL索引从基础到原理,看这一篇就够了
  • 普通高考预报名上传蓝底证件照手机自拍方法详解
  • Webserver(2.3)exec函数族
  • LeetCode Hot100 - 子串篇
  • 【Android】Convenient ADB Commands
  • elementUI 时间控件控制时间选择
  • 什么是x86架构,什么是arm架构
  • c语言水仙花,超简单讲解
  • Flutter 13 网络层框架架构设计,支持dio等框架。
  • Python小白学习教程从入门到入坑------第二十课 闭包修饰器(语法基础)
  • Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件
  • 如何配置,npm install 是从本地安装依赖
  • Python画图3个小案例之“一起看流星雨”、“爱心跳动”、“烟花绚丽”