redis的缓存雪崩、缓存穿透、缓存击穿都代表什么

redis的缓存雪崩、缓存穿透、缓存击穿都代表什么。
他们之间又有啥区别呢。

缓存雪崩:是缓存同时过期
缓存穿透:是缓存和数据库都没有
缓存击穿:是大量请求访问某一个点的缓存

  • 这篇博客也许可以解决你的问题👉 :Redis缓存穿透、缓存击穿、缓存雪崩及其对应的解决方案
  • 除此之外, 这篇博客: Redis缓存击穿,缓存穿透,缓存雪崩解决方案(附代码)中的 解决方案二:热点数据永不过期 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 要值得注意的是,这里说到的永不过期并不是将热点数据存在时间设置为无限制。而是将过期时间存在key对应的value里,如果发现要过期了,通过一个后台的异步线程进行缓存的重建。

    请添加图片描述

    从实战看,这种方法对于性能非常友好,唯一不足的就是重建缓存时候,其余线程(非重建缓存的线程)可能访问的是老数据,但是对于一般的互联网功能来说这个还是可以忍受。

    public String get(Sting key){
    	V v = redis.get(key);
    	String value = v.getValue(); 
    	long timeout = v.getTimeout(); 
    	if (v.timeout <= System.currentTimeMillis()){
    		// 异步更新后台异常执行
    		threadPool.execute(new Runnable(){
    			public void run(){
    				String keyMutex = "mutex:" + key; 
    				if(redis.setnx(keyMutex, "1")){
    					//3 min timeout to avoid mutex holder crash
    					redis.expire(keyMutex, 3 * 60);
    					String dbValue = db.get(key);
    					redis.set(key, dbValue);  
               redis.delete(keyMutex);
             }
           }
        });
      }
      return value;
    }