数据库和缓存的数据一致性问题是 Web 开发中经常碰到的,一般我们都是采用 cache aside 方案,比如这篇文章介绍的。最近参考Scaling Memcache at Facebook,我想到了一个基于 redis 的简化版本,不知是否可行,希望大家帮忙参考下:
- cacheMiss 时,生成一个对应 cacheKey 的 leaseId ( redis 生成一个值:key 是
cacheKey + "_id",value 是随机数,expireTime=10 秒,若 key 已存在则失败),若生成 leaseId 失败则等待并重试。 - cacheMiss 后,先查 db 再更新缓存,但更新缓存的时候,需要检查 leaseId 是否有效( redis 是否存在 key=
cacheKey + "_id"、value=leaseId 的值) - 每次更新 db 后,删除缓存,同时删除 leaseId ( redis 删除 key=
cacheKey + "_id"的值)
这样有什么问题吗?