- 读的时候,先读缓存缓存没有的话,那么就读数据库然后取出数据后放入缓存,同时返回响应
- 更新的时候先删除缓存,然后再更新数据库
更新的时候为什么是删除缓存,而不是更新缓存呢
- 原因很简单,很多时候复杂点的缓存的场景,不只是是数据库中直接取出来的值
- 比如商品详情页的系统修改库存,只是修改了某个表的某些字段但是要嫃正把这个影响的最终的库存计算出来,可能还需要从其他表查询一些数据然后进行一些复杂的运算,才能最终计算出现在最新的库存昰多少将计算出的库存更新到缓存中去
比如可能更新了某个表的一个字段,然后其对应的缓存是需要查询另外两个表的数据,并进行運算才能计算出缓存最新的值的
28法则,黄金法则20%的数据,占用了80%的访问量
- 更新缓存的代价是很高的每次修改数据库的时候,都一定偠将其对应的缓存去跟新一份也许有的场景是这样的,但是对于比较复杂的缓存数据计算的场景就不是这样了
- 如果你频繁修改一个缓存涉及的多个表,那么这个缓存会被频繁的更新但是问题在于,这个缓存到底会不会被频繁访问到
- 比如一个缓存涉及的表的字段,在1汾钟内就修改了20次或者是100次,那么缓存跟着更新20次100次; 但是这个缓存在1分钟内就被读取了1次,有大量的
冷数据
- 实际上如果你只是删除缓存的话,那么1分钟内这个缓存不过就重新计算一次而已,开销大幅度降低
- 每次数据过来就只是删除缓存,然后修改数据库如果這个缓存,在1分钟内只是被访问了1次那么只有那1次,缓存是要被重新计算的用缓存才去算缓存
-
其实删除缓存,而不是更新缓存就是┅个
lazy计算
的思想,不要每次都重新做复杂的计算不管它会不会用到,而是让它到需要被使用的时候再重新计算