三种常见的缓存更新策略
- 缓存意义:减少服务端访问数据库的IO次数。提升访问速度
- 适用场景:①数据库的数据不经常改变 ②数据量访问量比较大
Cache Aside Pattern(旁路缓存模式)
- 该缓存模式是比较常用的一种缓存更新策略,并且适合读比较多的场景。并且该缓存更新策略模式会以数据库的数据为准的。
- 读策略:首先会访问缓存中是否有对应的数据,如果没有将会访问数据库,并将数据保存到缓存中。
- 写策略:①首先更新数据库中的数据 ②其次删除缓存对应的数据
如此更新数据的原因
- 删除Cache而不是更新Cache: ①节省服务端的资源,删除缓存中的数据更加的直接,因为得到缓存中的数据是会消耗服务端的CPU资源的,如果频繁的修改数据,进而导致频繁的更新Cache中的数据,这样是及其浪费资源的。 ②在高并发的情况下,更新Cache中的内容会引发高并发问题
- 次序倒换可以吗:不可以。首先先删除掉缓存的数据,会让后续直接访问数据库中的数据,而这可能会读到数据库没更新之前的数据。其实次序不互换也会导致这样的问题,不过删除Cache中的速度是要优于更新数据库数据的速度的。
- 因此该缓存更新策略是适用于多读场景的,如果频繁的更新数据库中的内容会影响缓存中的命中率。
Write/Read Through Pattern(读写穿透)
- 读策略:同上
- 写策略:首先会查看缓存中有无要写入的数据,如果有的话更新缓存中的数据,随后同步更新数据库中的数据。如果缓存中不存在的话就直接更新数据库中的数据。
Write Behind Pattern(异步缓存写入)
- 在写策略上将同步更新数据库的操作更改为异步。
对于首次访问数据一定不存在内存中的情况
- 可以提前将热点数据存储在数据库中。