ARTICLE · 1313086
高级软件工程师把Redis用得飞起,各种get/s
高级软件工程师把Redis用得飞起,各种get/s
高级软件工程师把Redis用得飞起,各种get/s
前两天 code review,有个高级工程师把 Redis 用得满天飞。满屏都是 get、set,我直接问了一句:你想过数据一致性吗?
读缓存其实没坑。先查 Redis,命中就返回;没命中再查数据库,结果回填缓存。
真正麻烦的是写操作。业内一般不更新缓存,而是删掉它——因为缓存数据可能关联多张表、算半天,删了让下次读时重建更省事。
但删缓存也有坑。要是先删缓存再更新数据库,中间一旦卡一下,另一个线程就会把旧数据重新塞回缓存,两边从此对不上。解法是延迟双删:删、更新、等几百毫秒再删一次。具体等多久看业务,不是拍脑袋填 500。
反过来先更新数据库再删缓存,同样会翻车——删缓存这一步要是网络抖一下,缓存里留的就是旧数据。
所以这事儿没有银弹。删除本身也可能失败,得靠消息队列异步重试;或者干脆上 Canal,监听 MySQL 的变更自动刷缓存。
原文高级软件工程师把Redis用得飞起,各种get/set满天飞,技术经理review代码后问了一句,你想过数据一致性问题吗?
北京,8分钟前,















































































