搜索结果: "Redis" (45)
三种锁横向对比:一张选型地图
Redis 十万级 QPS 但共识缺位,ZK 共识过硬但千级吞吐,etcd 两头占优但要看生态脸色。选型不是比参数,是比场景:高频竞争给 Redis,低频高危给 ZK/etcd,强一致资金叠 fencing。多数团队的最优解出人意料地朴素。
ZooKeeper 分布式锁:临时顺序节点的排队艺术
创建临时顺序节点、看兄弟谁最小、只盯住前一个——三步走完,锁成了。互斥靠最小序号,防死锁靠会话蒸发,公平靠全局排队,防惊群靠「只盯前一个」。前五篇在 Redis 里拼命修的坑,ZK 方案里很多压根不存在。
锁竞争与等待唤醒:一百个线程抢一把锁
零点大促,一百个请求同时抢同一张卡上的锁,抢到的在干活,剩下九十九个在干嘛?自旋会把 Redis 打爆,傻等会拖垮响应。pub/sub 唤醒、公平排队、单飞收敛——等待的艺术,决定了锁系统的上限。
RedLock 之争:Martin 与 antirez 的隔空交锋
五台独立 Redis、多数派加锁、失败全解锁——RedLock 看起来无懈可击。分布式系统权威 Martin 发文质疑:GC 停顿和时钟跳变面前,RedLock 的安全性站不住。antirez 下场应战。这场论战给所有用锁的人留下了两句话:锁分效率与正确性,正确性要靠令牌兜底。
Redisson:可重入锁的完整实现
方法 A 拿了锁,内部调用的方法 B 还要同一把锁——不会重入的锁会用自锁的方式杀死自己。Redisson 用一个 Hash 结构把重入计数、看门狗续期、安全释放全部封装,三行代码背后是一整套工程化答案。
从 SETNX 到 SET NX PX:一条命令的二十年进化
用 Redis 加锁,第一反应是 SETNX。但「加锁」和「设过期」分两步会崩出原子性问题,「删除」不看身份会误伤后来者,校验加删除又差一个原子——三代写法排着队踩坑,最后收敛成一条命令加一段 Lua。
Redis 发号器:简单背后的两本账
短链、券码这类小场景犯不着养发号服务,Redis INCR 一行搞定。单线程原子自增是真省心,但两本账要算清:持久化回档号会跳,主从切换号会回——号有洞能忍,号有重不能忍。
workerID 之争:谁来给机器发身份证
镜像克隆忘改配置文件,两台节点共用机器号 3,上线半年后突然撞号。手工配置靠不住,DB 分配、ZooKeeper 顺序节点、Redis 自增、K8s 有序命名四条路各有价——身份证发放制度决定雪花的底座稳不稳。
多级缓存:本地与分布式的合璧
Redis 再快也是一次网络往返,进程内存里的 Caffeine 才是纳秒级的终点站——本地缓存挡第一波,分布式缓存守第二层,数据库永远排在最后。但多一级缓存就多一份副本,「多实例怎么一起失效」这个新难题,是多级方案的全部代价所在。