缓存更新策略

一般有三种:旁路缓存,读穿/写穿,写回策略

我们开发中用的也是第一种,其他后两种

旁路缓存策略

读策略:缓存读不到,就读数据库然后写入

写策略:先更新数据,再删缓存。

但这种只适合读多写少,且并发量较小的情况。

如果写多读少的话,会导致缓存命中率比较低。这些时候可以采用更新缓存的策略

  • 加锁,只有一个线程去更新缓存
  • 缓存时间设置小一点,即使出现缓存不一致的情况

高并发下,你删key了,那请求不就直接打到数据库了吗?

参考guava设置

对于toc来说

可以采用互斥锁,保证只有一个线程去更新数据库。其他线程拿到旧值就返回了,等那个线程写回

读穿/写穿策略

原则就是应用程序只和缓存打交道,而操作数据库是由缓存代理的

redis不支持这种功能

Write Back(写回)策略

更新缓存时,不立马写数据库,立马返回。而是异步批量更新

redis同样也不支持批量更新。