我正在使用redis支持一些底层持久存储,因此当缓存请求未命中时,逻辑即将从备份存储中获取数据并将其传递给存储在缓存中的客户端。 当一些同时发生错过密钥的请求发生时,我确实只允许一个请求到达持久存储并完成工作,而其他请求将锁定或已订阅密钥更改并返回调用者从缓存中获取的值。
答案 0 :(得分:1)
一种可能的方法是在需要填充名为whatever:lock
的缓存时添加带有过期(see EXPIRE
command)的字符串密钥(使用对项目有意义的内容更改任何) )并在4-5分钟内到期。
对缓存的所有请求都应检查是否存在whatever:lock
:
SET
和EXPIRE
都应作为MULTI
command的一部分发布,以确保过期与密钥创建一起原子设置。
您也可以使用SETNX
。 Check Redis official doc about this command, where it says that it can be used to create locks