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

做网站需要租服务器吗江西住房与城乡建设厅网站

做网站需要租服务器吗,江西住房与城乡建设厅网站,电子商务推广网站,建设网站的岗位职责Redisson 实现分布式读写锁的核心原理是 ​基于 Redis 的 Lua 脚本原子操作​ ​Pub/Sub 通知机制#xff0c;在保证强一致性的同时实现高效的读并发#xff08;读不阻塞读#xff0c;写阻塞读#xff09;。以下是其核心设计#xff1a;​一、核心数据结构​Redisson 使用…Redisson 实现分布式读写锁的核心原理是 ​基于 Redis 的 Lua 脚本原子操作​ ​Pub/Sub 通知机制在保证强一致性的同时实现高效的读并发读不阻塞读写阻塞读。以下是其核心设计 ​一、核心数据结构​Redisson 使用 Redis 的 ​Hash 结构​ 存储锁信息​Key: {锁名称}如 my_lock​Hash 字段:mode: 锁模式read/writeUUID:threadId: 持有锁的客户端标识如 c983678b-1421-4c76-8ea0-7f3ab7d9c775:1count: 锁的重入次数支持可重入 ​二、读锁Read Lock实现原理​​1. 获取读锁流程​ -- Lua 脚本原子执行 if (redis.call(exists, KEYS[1]) 0) then -- 无任何锁redis.call(hset, KEYS[1], ARGV[2], 1); -- 创建读锁redis.call(pexpire, KEYS[1], ARGV[1]); -- 设置超时return nil; end; if (redis.call(hexists, KEYS[1], ARGV[2]) 1) then -- 当前线程已持有读锁redis.call(hincrby, KEYS[1], ARGV[2], 1); -- 重入次数1redis.call(pexpire, KEYS[1], ARGV[1]); -- 刷新超时return nil; end; if (redis.call(hexists, KEYS[1], mode) 1) and (redis.call(hget, KEYS[1], mode) read) then -- 已有其他读锁redis.call(hincrby, KEYS[1], ARGV[2], 1); -- 直接叠加读锁计数redis.call(pexpire, KEYS[1], ARGV[1]);return nil; end; return redis.call(pttl, KEYS[1]); -- 存在写锁返回剩余时间需等待​关键点​只要当前无写锁mode 非 write读锁可直接获取​不阻塞其他读锁。多个读锁共享同一个 Hash 结构通过字段区分不同客户端。​2. 读锁释放​ if (redis.call(hexists, KEYS[1], ARGV[2]) 0) then return nil; end; -- 锁不存在 local counter redis.call(hincrby, KEYS[1], ARGV[2], -1); -- 重入次数-1 if (counter 0) thenredis.call(hdel, KEYS[1], ARGV[2]); -- 移除当前线程的锁 end; if (redis.call(hlen, KEYS[1]) 1) then -- 只剩 mode 字段无任何锁redis.call(del, KEYS[1]); -- 删除整个 Keyredis.call(publish, KEYS[2], ARGV[1]); -- 发布解锁通知 end; return 1; ​三、写锁Write Lock实现原理​​1. 获取写锁流程​ if (redis.call(exists, KEYS[1]) 0) then -- 无任何锁redis.call(hset, KEYS[1], mode, write); -- 设置为写模式redis.call(hset, KEYS[1], ARGV[2], 1); -- 记录持有者redis.call(pexpire, KEYS[1], ARGV[1]); -- 设置超时return nil; end; if (redis.call(hexists, KEYS[1], mode) 1) and (redis.call(hget, KEYS[1], mode) write) then -- 已有写锁if (redis.call(hexists, KEYS[1], ARGV[2]) 1) then -- 当前线程持有写锁redis.call(hincrby, KEYS[1], ARGV[2], 1); -- 重入次数1redis.call(pexpire, KEYS[1], ARGV[1]);return nil;end; end; return redis.call(pttl, KEYS[1]); -- 存在读锁或其他写锁返回剩余时间需等待​关键点​写锁要求绝对互斥​必须无任何锁读/写存在才能获取。若存在读锁或其他写锁客户端需等待通过 Pub/Sub 监听解锁通知。​2. 写锁释放​ if (redis.call(hexists, KEYS[1], ARGV[3]) 0) then return nil; end; -- 锁不存在 local counter redis.call(hincrby, KEYS[1], ARGV[3], -1); -- 重入次数-1 if (counter 0) thenredis.call(hdel, KEYS[1], ARGV[3]); -- 移除持有者 end; if (redis.call(hlen, KEYS[1]) 1) then -- 只剩 mode 字段redis.call(del, KEYS[1]); -- 删除 Keyredis.call(publish, KEYS[2], ARGV[1]); -- 发布解锁通知 end; return 1; ​四、阻塞等待与通知机制​​1. 锁竞争时的等待策略​当锁获取失败时Redisson ​不轮询而是通过 Redis 的 ​Pub/Sub 订阅锁释放事件​ // 伪代码订阅解锁通知 RedisPubSub listener new RedisPubSub() {void onMessage(String channel, String message) {if (message.equals(unlock_msg)) {tryAcquireLock(); // 收到通知后重新尝试获取锁}} }; redis.subscribe(listener, lock_channel);​优势​避免频繁轮询 Redis减少网络开销。​2. 锁超时与续期​​看门狗机制Watchdog​​后台线程每隔 10 秒检查锁是否仍被持有若持有则刷新 TTL默认 30 秒防止业务未完成时锁过期。 if (lockAcquired) {scheduleExpirationRenewal(threadId); // 启动看门狗线程 } ​五、公平锁实现​Redisson 还提供公平读写锁​按请求顺序获取锁使用 Redis ​List 结构作为请求队列。每个客户端获取锁前在队列尾部追加自己的请求 ID。只有队首的请求有权尝试获取锁避免饥饿问题。 ​总结Redisson 读写锁的核心优势​​读读并发​通过 Hash 结构叠加读锁计数无写锁时读操作永不阻塞。​原子性​所有锁操作通过 Lua 脚本在 Redis 单线程中执行无竞态条件。​低开销等待​基于 Pub/Sub 的事件通知取代轮询。​容错性​锁超时自动释放 看门狗续期避免死锁。​可重入​支持同一线程多次加锁通过 count 字段实现。 ​注​实际代码比上述伪代码更复杂含重试机制、异常处理等但核心逻辑一致。建议直接阅读 Redisson 源码 中的 RedissonReadLock 和 RedissonWriteLock 类。
http://www.pierceye.com/news/87064/

相关文章:

  • 个人网站网页首页腾讯企业邮箱免费版
  • asp.net网站开发代码wordpress分类首页调用
  • 潮州网站开发多少钱网站开发体会
  • 坑梓网站建设平台wordpress正体中文
  • 营销型网站工程成立公司注册资本需要实缴吗
  • 有没有教如何做衣服的网站东莞市智通人才招聘网
  • 公众号做淘宝客接入手机网站学网站开发有前途吗
  • 集团公司门户网站建设软装素材网站有哪些
  • 十大免费ppt网站在线个人做电影网站
  • 慈城旅游网站建设策划书装修公司加盟 招商加盟
  • 建设个商城网站需要多少钱哪个网站有做兼职的
  • 在哪里可以建网站网络教学平台登录
  • 太原seo建站联雅网站建设
  • DW做旅游网站毕业设计模板什么是定制网站
  • 建设专业网站公司wordpress评论打卡
  • 网站页面设计布局静安企业网站制作
  • 枸杞网站怎么做公司网站用什么开发
  • 规划设计公司网站北京注册公司多少钱
  • 网站项目报价方案网站建设学什么好
  • 自己想做一个网站怎么做考研培训机构排名前十
  • 郑州网站推广服务天津建设集团网站
  • 网络购物网站建设宜昌网站seo
  • 国内使用vue做的网站创意设计网站公司
  • 紫竹桥网站建设阳江网红酒店
  • 做企业网站有前途吗项目建设程序
  • 网站建设与运维预算小程序的下载
  • 全国水利建设市场信用信息平台网站谷歌官网入口
  • 潍坊市住房和城乡建设网站网络营销对传统营销的影响
  • 自建服务器网站备案简约网站模板
  • 在省建设厅网站怎样报建非主营电子商务企业网站有哪些