Redis缓存雪崩缓存击穿缓存穿透的处理方式
当我们在项目中使用到redis的时候,那么势必会考虑如果出现缓存雪崩,缓存击穿,缓存穿透之后会怎么办。下面我们来讲讲解决方案
缓存击穿
什么是缓存击穿呢?当一个key是热点的时候,在不停的被高流量的请求进行访问的时候。如果key在瞬间出现了失效,那么这些大量的请求直接打到数据库中则会可能会导致整个服务的瘫痪或者性能的严重下降。这种情况则是缓存击穿。
那么如何防止出现缓存击穿这种情况呢?
public Object getData(String key) {// 1. 尝试从缓存获取数据Object data = redis.get(key);if (data != null) {return data; // 缓存命中直接返回}// 2. 缓存未命中,获取键对应的锁Lock keyLock = keyLocks.computeIfAbsent(key, k -> new ReentrantLock());try {// 3. 尝试获取锁if (keyLock.tryLock(0, TimeUnit.SECONDS)) {try