• 【Redis】缓存更新策略


    在这里插入图片描述

    在这里插入图片描述

    1. 缓存更新策略综述

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

    2. 缓存策略的选择

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

    在这里插入图片描述

    2. 主动更新策略

    缓存的主动更新策略又分为以下三种:
    在这里插入图片描述

    3. Cache Aside Pattern

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

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

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

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

    在这里插入图片描述

    4.代码实现

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

        @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();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    Camunda 创建 流程图 (二)
    请查收 | Navicat 热门技术问答
    接口设计的18条军规
    208道最常见的Java面试题整理(面试必备)
    如何在Xamarin中快速集成Android版远程配置
    爱数SMART 2022峰会开启,分享数据战略与建设数据驱动型组织方法论
    优化隔离级别以扩展分布式数据库
    【教学类-16-01】20221121《数字卡片9*2》(中班)
    大数据之Hive(三)
    ccpc宠物对战
  • 原文地址:https://blog.csdn.net/liuwanqing233333/article/details/128116339