浅谈Redis中的缓存更新策略

 更新时间:2023年08月10日 10:10:36   作者:刘婉晴  
这篇文章主要介绍了浅谈Redis中的缓存更新策略,CacheAsidePatter是我们比较常用的缓存更新策略,其由缓存调用者在更新数据库时,在业务逻辑中设置缓存更新,需要的朋友可以参考下

在这里插入图片描述

在这里插入图片描述

1. 缓存更新策略综述

  1. 内存淘汰
    • 不用自己维护,利用 Redis 自己的内存淘汰机制 (内存不足时,触发策略,默认开启,可自己配置),其可在一定程度上保持数据一致性
  2. 超时剔除
    • 给数据添加 TTL,到期之后自动剔除,是最终一致性
  3. 自动更新
    • 编写业务逻辑,修改数据库时,更新缓存,一致性高,维护成本高

2. 缓存策略的选择

选择内存策略,要基于业务场景 —— 低一致性需求,高一致性需求

在这里插入图片描述

3. 主动更新策略

缓存的主动更新策略又分为以下三种:

在这里插入图片描述

4. Cache Aside Pattern

Cache Aside Patter 是我们比较常用的缓存更新策略,其由缓存调用者在更新数据库时,在业务逻辑中设置缓存更新。对 Cache Aside Pattern ,有以下三个问题比较重要。

  • 是删除缓存还是更新缓存?
    使用更新数据库时删除缓存,下次读数据的时候再写入缓存的策略,更新缓存会产生很多不必要的写操作。
  • 如何保证缓存与数据库的操作的同时成功或者失败
    在单体项目中很好控制,在分布式项目中,使用分布式事务解决。
  • 先操作缓存还是先操作数据库

线程问题:使用先操作数据库,再删除缓存。先操作数据库再操作缓存,能减少发生问题的概率。

如下是两种线程不安全问题产生的场景,但是因为缓存的操作数据的速度是远远高于数据库写操作的速度的,因此先操作数据库再删除缓存,出现问题的可能性低。

在这里插入图片描述

5.代码实现

在更新代码中,加入删除缓存的逻辑即可,代码示例如下:

    @Override
    public Result update(Shop shop) {
        if(shop == null){
            return Result.fail("店铺不能为 null");
        }
        // 更新数据库
        updateById(shop);
        // 删除缓存
        stringRedisTemplate.delete(CACHE_SHOP_KEY + shop.getId());
        return Result.ok();
    }

到此这篇关于浅谈Redis中的缓存更新策略的文章就介绍到这了,更多相关Redis缓存更新策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis分布式锁与Redlock算法实现

    Redis分布式锁与Redlock算法实现

    在Redis中,可以使用多种方式实现分布式锁,如使用SETNX命令或RedLock算法,本文就来介绍一下Redis分布式锁与Redlock算法实现,感兴趣的可以了解一下
    2023-12-12
  • 使用redis生成唯一编号及原理示例详解

    使用redis生成唯一编号及原理示例详解

    今天介绍下如何使用redis生成唯一的序列号,其实主要思想还是利用redis单线程的特性,可以保证操作的原子性,使读写同一个key时不会出现不同的数据,感兴趣的朋友跟随小编一起看看吧
    2021-09-09
  • 详解redis脚本命令执行问题(redis.call)

    详解redis脚本命令执行问题(redis.call)

    这篇文章主要介绍了redis脚本命令执行问题(redis.call),分别介绍了redis-cli命令行中执行及linux命令行中执行问题,本文给大家介绍的非常详细,需要的朋友参考下吧
    2022-03-03
  • 推荐几款 Redis 可视化工具(太厉害了)

    推荐几款 Redis 可视化工具(太厉害了)

    这篇文章主要介绍了推荐几款 Redis 可视化工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-04-04
  • Redisson之lock()和tryLock()的区别及说明

    Redisson之lock()和tryLock()的区别及说明

    这篇文章主要介绍了Redisson之lock()和tryLock()的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Redis如何存储对象与集合示例详解

    Redis如何存储对象与集合示例详解

    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)本文介绍了关于Redis是如何存储对象与集合的相关资料,需要的朋友可以参考下
    2018-05-05
  • Redis如何正确关闭和开启持久化

    Redis如何正确关闭和开启持久化

    本文主要介绍了Redis如何正确关闭和开启持久化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Windows下Redis安装配置教程

    Windows下Redis安装配置教程

    这篇文章主要为大家详细介绍了Windows下Redis安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Redis中缓存穿透/击穿/雪崩问题和解决方法

    Redis中缓存穿透/击穿/雪崩问题和解决方法

    大家好,本篇文章主要讲的是Redis中缓存穿透/击穿/雪崩问题和解决方法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦,方便下次浏览
    2021-12-12
  • 利用Redis实现订单30分钟自动取消

    利用Redis实现订单30分钟自动取消

    本文主要介绍了利用Redis实现订单30分钟自动取消,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论