0%

缓存常见问题

1. 常见问题

1.1. 代码耦合

假如业务代码中交织大量缓存相关的代码, 会增加维护工作量
可以使用 aop 的方式, 将缓存代码剥离出来, 集中在一起, 提高代码的可重用性和可维护性.
可以参考
以及 qiujiayu/AutoLoadCache

1.2. 缓存冲突

在多模块开发中, 可能有多个模块使用同一个 key 的问题

解决办法:

  1. 在每个 key 之前加上一个 namespace, 用来标识区分不同模块的缓存
  2. 在 redis 中, 也可以让不同的模块使用不同的 database 的方式

1.3. 缓存穿透

@TO-BE-CONTINUE 2020-04-27

1.4. 缓存雪崩

突然在某一时刻, 有大量的缓存失效, 导致大量查询请求涌向数据库. 如果数据库顶不住压力, 就会连锁导致服务报错与超时, 然后请求等待时间过长后, 服务不可用

解决办法:

  1. 在使用缓存时, 如果发现缓存即将失效, 则通过异步队列刷新缓存
  2. 使用查询锁的方式, 同一个缓存的查询, 保证只有一个线程处理, 防止大量重复查询

2. Resource