美文网首页
缓存穿透问题

缓存穿透问题

作者: an_bear | 来源:发表于2018-09-01 13:11 被阅读0次

概念:缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

public Stringget(key){

String value = redis.get(key);

    //代表缓存值过期

    if (value ==null) {

// 获取锁

        if (redis.add(lock_key)) {

//代表add成功

            value = db.get(key);

            redis.set(key, value, expire_secs);

        }else {

//这个时候代表同时候的其他线程已经load db并回设到缓存了,这时候重试获取缓存值即可

            sleep(50);

            //重试

            get(key);

        }

}else {

return value;

    }

}

lock_key:防止死锁,设置3s有效期

相关文章

网友评论

      本文标题:缓存穿透问题

      本文链接:https://www.haomeiwen.com/subject/lvtuwftx.html