首页 > 数据库 >redis和reddision随写

redis和reddision随写

时间:2022-08-31 16:36:37浏览次数:40  
标签:acc 随写 reddision redis 节点 000 key lck 客户端

redission锁:
上锁过程:
image
redission1客户端去hexists判断是否可以获取锁,可以就执行lua脚本,为redission1客户端绑定分布式锁lck_acc_000。此时lck_acc_000的value设置为Hash类型,key为redission1客户端标识,map组成为key(标识)和value(锁的次数)组成。然后lck_acc_000默认国企时间为30秒。
redission2客户端去执行hexists判断是否能获取lck_acc_000锁,此时已被redission1客户端持有,不能获取,也就是不能加锁,返回pttl lck_acc_000,然后redission2客户端可以通过获取锁的过期时间来设置下一次访问时间。
lck_acc_000默认30秒过期,redission提供看门狗机制进行锁时间的续期。当客户端加锁成功后,会启动watch dog每10秒为redission1客户端查询是否正在进行工作,如果还未完成工作,就会进行锁时间续期,如果不工作,会将锁释放掉。
释放锁过程:
image
redission锁使用的是可重入锁,就是可以多次持有锁。
如果redission客户端多次持有锁,就是将锁key的值hash的值的次数每次加1。
释放锁就是hash值得次数减1。为0将锁删掉,真正意义上释放。

redis锁:
redis锁使用得自身的setnx机制,开启事务之后,将key使用setnx上锁,如果key存在会进行上锁。setnx意思是如果key不存在则创建。然后在事务提交之后将锁删掉就行。
在java代码中就是如果key存在,给key添加一个锁,然后事务处理结束之后,自己在进行unlock释放锁。

分布式锁会存在一个问题:
当缓存服务器集群部署之后,在业务使用过程中会有一个主节点服务器,然后通过主节点同其他节点缓存服务器进行数据同步,中间存在时间差。当客户端1在主节点服务器进行持有锁操作之后,主节点服务器在与次节点服务器数据同步时宕机了,数据未同步过去,此时缓存服务器会切换为次节点服务器,此时客户端2就也能持有锁。就出现了锁被多服务持有,出现了原子性被破坏。

标签:acc,随写,reddision,redis,节点,000,key,lck,客户端
From: https://www.cnblogs.com/zzxbkblog/p/16532507.html

相关文章

  • 短视频后台Mysql和Redis
    RabbitMQ一、什么是消息队列消息指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。“消息队列(MessageQueue)”是在消息......
  • [Bug0048] Redis安装成功后Warning: no config file specified, using the default co
    1、问题redis启动错误:Warning:noconfigfilespecified,usingthedefaultconfig.Inordertospecifyaconfig2、场景迁移环境,新windows环境下双击redis-serve......
  • 借助redis实现对IP限流
    背景: 若依前后端分离项目(vue+springboot+springmvc+mybatis),redis。 需求: 借助redis实现对IP限流。实现:参考  https://blog.csdn.net/qq_33762302/article/......
  • Redis-------String类型常用命令
    String类型的常见命令String的常用命令有:命令描述set<key><value>设置键值对,成功返回1,失败返回0,key值已经存在则覆盖原值get<key>根据key返回对应的valu......
  • (三)redis命令学习,List
    packageredis.clients.jedis.commands;importjava.util.List;importredis.clients.jedis.args.ListDirection;importredis.clients.jedis.args.ListPosition;im......
  • (二)Redis命令学习之 StringCommands
    packageredis.clients.jedis.commands;importjava.util.List;importredis.clients.jedis.args.BitCountOption;importredis.clients.jedis.args.BitOP;importr......
  • 50道Redis高频面试题(13-20)
    十三、线上Redis持久化策略一般如何设置如果对性能要求较高,在master最好不要做持久化,可以在某个slave开启aof备份数据,策略设置为每秒同步一次即可。十四、一次线上事故,Re......
  • Redis基本使用
    /***@Author:KongXiao*@Date:2022/8/30-14:01*@Description:*www.redis.net.cn中文网站*Redis字符串类型*SETkeyvalue*GETkey......
  • redis+lua实现令牌桶限流
    github下载直接使用。无任何冗余代码: [email protected]:wangbensen/zhongtai-ext.gitLua脚本--[[1.key-令牌桶的key2.intervalPerTokens-生成令牌的间隔(m......
  • redis zset 延迟合并任务处理
    rediszset延迟合并任务处理@AutowiredpublicRedisTemplateredisTemplate;##1.发送端:在接口中收集任务ID,累计时间段之后,合并处理。##rediszset主键,任......