Redis缓存三剑客

缓存三剑客问题及解决方案

为什么会存在缓存三剑客的问题

我们要知道我是引路缓存的主要目的是减少大量对数据库的直接访问请求导致数据库扛不住这么多并发而宕机。如果单单只把数据放入缓存这个操作,在某些情况下还是会发生大量请求打在数据库。

缓存击穿

比如当我们一个热点key(经常被访问的数据)突然过期了,从缓存中获取不到数据就会从数据库中查,如果此时有大量的请求,这些请求都会打在数据库层面而数据库扛不住。

解决方案:

1.很容易想到的就是不给这个热key设置过期时间,让他们永不过期

2.提前通过缓存预热的方式将他们全部写入缓存可以避免大量的请求访问

3.使用分布式锁来控制访问数据库的请求数量。

下面我用代码演示一下第3种方案

    //分布式锁解决缓存击穿问题
    public CoursePublish getCoursePublishCache2(Long courseId) {
        //查询缓存不存在在查数据库
        Object o = redisTemplate.opsForValue().get("course" + courseId);
        if(o!=null){
            String s = o.toString();
            return JSON.parseObject(s, CoursePublish.class);
        }else{
            RLock lock = redissonClient.getLock("coursqueeylock" + courseId);
            lock.lock();
            try {
                //从数据库中查
           
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值