redis更新策略
1.先更新缓存再更新数据库:在双写场景下,很容易出现一致性问题,在读写场景下,小概率出现一致性问题,所以Pass。
2.先删除缓存再更新数据库:在双写场景下,不会出现一致性问题,在读写场景下,很容易出现一致性问题,所以Pass。
3.先更新数据库再更新缓存:在双写场景下,很容易出现一致性问题,在读写场景下,小概率出现一致性问题,所以Pass。
4.先更新数据库再删除缓存:在双写场景下,不会出现一致性问题,在读写场景下,小概率出现一致性问题,所以暂时保留。
5.延迟双删 : 先进行缓存清除,再执行update,最后(延迟N秒)再执行缓存清除。
延迟双删策略只是一种同步数据库与缓存的手段,在系统并发量不高的情况下可以使用这种方式解决,如果是并发量高的情况下我们也可以另寻其他解决方案 如:canal
redis过期策略
先区分两个概念,被动删除与主动删除
1.被动删除:key再被操作时,Redis主动检查key是否过期,过期则删除;
优劣:对CPU友好,只有在被操作时删除,不浪费CPU时间;对内存不友好,如果同时大量key过期,这些key在被使 用前不会被删除造成资源浪费;
2.主动删除:Redis会定期随机扫描一批设置了过期时间的key并进行删除处理;当已用内存超过最大内存maxmemory时也会触发主动清除策略;
Redis采用的是定期删除 + 懒惰删除策略。
从库的过期策略
从库不会进行过期扫描,从库对过期的处理是被动的。主库在 key 到期时,会在 AOF 文件里增加一条 del 指令,同步到所有的从库,从库通过执行这条 del 指令来删除过期的 key。
因为指令同步是异步进行的,所以主库过期的 key 的 del 指令没有及时同步到从库的话,会出现主从数据的不一致,主库没有的数据在从库里还存在。
标签:缓存,策略,删除,过期,redis,key,一致性,淘汰,从库
From: https://www.cnblogs.com/sitting-on-the-clouds/p/18355248