龙空技术网

借鉴租约机制的DB和缓存双淘汰一致性方案

云计算小哥 112

前言:

如今各位老铁们对“租约机制 时间问题”大概比较看重,同学们都想要知道一些“租约机制 时间问题”的相关知识。那么小编也在网摘上汇集了一些对于“租约机制 时间问题””的相关知识,希望小伙伴们能喜欢,姐妹们一起来了解一下吧!

借鉴租约机制的DB和缓存一致性双淘汰方案:

1.写请求时,基于双淘汰方案,先淘汰缓存,再写数据库,最后再次淘汰缓存

2.缓存第一次淘汰时为了加快其老化,同时又不造成缓存雪崩。如果没有该步骤,假设租约为N小时,如果第二次缓存淘汰失败的话,那就可能会存在N小时的数据不一致性;如果第一次淘汰失败的话,则可直接返回了

3.缓存第二次淘汰,参考租约机制,加上随机超时时间,同时也可以防止缓存雪崩

具体伪代码如下:

1)写请求:

public void write(string key, object value){

if getDistributedLock(){ //获取分布式锁

writeToCache(key, value, shortTime) // 缓存第一次淘汰,加快其老化,如果key存在,则让缓存失效

writeToDB(key, value) // 更新到数据库中

writeToCache(key, value,getRandomExpiredTime()) //缓存第二次淘汰,后更新缓存

}

}

备注:如果第二次缓存淘汰失败,那么会存在shortTime时间范围内的不一致性

2)读请求:

public object read(string key){

object value=getFromCache(key)

if value==null{

int expiredTime=getRandomExpiredTime() // 加上随机时间,防止缓存雪崩

value=getFromDB(key)

if value==null{

expiredTime=shortTime // 把null也缓存起来,设置短时间的存活,防止缓存穿透

value="null"

}

writeToCache(key, value, expiredTime)

}

return value

}

标签: #租约机制 时间问题