Redis问题
缓存问题
缓存是在第一次加载的数据进行复用,将数据存放指定地点以便下次加载使用。可防止多访问同一 数据库 而产生的堵塞,也能减轻 数据库 的压力!
Java缓存
- 虚拟机缓存(ehcache、JBoss Cache)
- 分布式缓存(redis、memcache)
- 数据库缓存
缓存雪崩
原因
原有缓存失效(或者未加载到缓存中),因此 访问过程会跨越缓存直接访问 数据库,这一过程很有可能会导致 数据库 宕机(CPU、内存 高负载)
解决方案
原有缓存失效后,可通过 加锁 或 队列 进行控制 数据库的线程数量。失效期间 尽快修复 缓存,否则 用户访问会堵塞
加锁
public Users getByUsers(Long id) {
// 1.先查询redis
String key = this.getClass().getName() + "-" + Thread.currentThread().getStackTrace()[1].getMethodName