缓存更新策略
一般有三种:旁路缓存,读穿/写穿,写回策略
我们开发中用的也是第一种,其他后两种
旁路缓存策略
读策略:缓存读不到,就读数据库然后写入
写策略:先更新数据,再删缓存。
但这种只适合读多写少,且并发量较小的情况。
如果写多读少的话,会导致缓存命中率比较低。这些时候可以采用更新缓存的策略
- 加锁,只有一个线程去更新缓存
- 缓存时间设置小一点,即使出现缓存不一致的情况
高并发下,你删key了,那请求不就直接打到数据库了吗?
参考guava设置
对于toc来说
可以采用互斥锁,保证只有一个线程去更新数据库。其他线程拿到旧值就返回了,等那个线程写回
读穿/写穿策略
原则就是应用程序只和缓存打交道,而操作数据库是由缓存代理的
redis不支持这种功能
Write Back(写回)策略
更新缓存时,不立马写数据库,立马返回。而是异步批量更新
redis同样也不支持批量更新。