【Redis】缓存更新策略

news2024/11/25 2:49:54

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();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电力运维】浅谈电力通信与泛在电力物联网技术的应用与发展

摘要:随着我国社会经济的快速发展,我国科技实力得到了巨大的提升,当前互联网通信技术在社会中得到了广泛的应用。随着电力通信技术的快速发展与更新,泛在电力物联网建设成为电力通讯发展的重要方向。本文已泛在电力物联网系统为核…

Docker使用

xshell和xftp软件下载 链接:https://pan.baidu.com/s/1G7DIw14UvOmTwU9SwtYILg 提取码:he18 --来自百度网盘超级会员V6的分享 docker相关资料: 链接:https://pan.baidu.com/s/1VcxvuJvBIKNKnUUHPlM3MA 提取码:6w5e …

一些常见的项目管理 KPI

本文将介绍一些常见的项目管理kpi,让大家更深刻的了解其作用及所存在的问题。 一、关键绩效指标的作用 在 GPS 和其他现代导航方法出现之前,水手和探险家们只能通过星星找到正确的方向。特别是在北半球,他们利用北极星找出真正的北方方位。…

[附源码]SSM计算机毕业设计医学季节性疾病筛查系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Mysql高频面试题(一)

文章目录1. Mysql如何实现的索引机制?2. InnoDB索引与MyISAM索引实现的区别是什么?3. 一个表中如果没有创建索引,那么还会创建B树吗?4. B树索引实现原理(数据结构)5. 聚簇索引与非聚簇索引的B树实现有什么区…

Vector源码分析

Vector源码分析 1 Vector基本介绍与类图 Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的: Vector 是同步访问的。Vector 包含了许多传统的方法,这些方法不属于集合框架。Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的…

pytest + yaml 框架 - 1.我们发布上线了!

前言 基于 httprunner 框架的用例结构,我自己开发了一个pytest yaml 的框架,那么是不是重复造轮子呢? 不可否认 httprunner 框架设计非常优秀,但是也有缺点,httprunner3.x的版本虽然也是基于pytest框架设计&#xff…

Spring中JDK与Cglib动态代理的区别

靠Spring吃饭的小伙伴一定经常听说动态代理这个词,没错,Aop就是靠它来实现的。Spring提供了两种代理模式:JDK动态代理、Cglib动态代理,供我们选择,那他们有啥区别呢?Sping为啥不自己从中挑选一个作为代理模…

IB物理的费曼图怎么考?

费曼图是用来描述基本粒子间相互作用的图形化表示,由诺贝尔物理学奖得主、著名物理学家理查德费曼(Richard Feynman)提出,十分清晰直观。虽然真正的费曼图可以用来做更深奥的数学计算,但是在IB物理中,考纲要…

那些惊艳一时的 CSS 属性

1.position: sticky 不知道大家平时业务开发中有没有碰到像上图一样的吸顶的需求:标题在滚动的时候,会一直贴着最顶上。 这种场景实际上很多:比如表格的标题栏、网站的导航栏、手机通讯录的人名首字母标题等等。如果让大家自己动手做的话&…

flink学习

Flink学习之路(一)Flink简介 - 走看看 Flink(一)-基本概念 - 知乎 Flink架构: Flink整个系统包含三个部分: 1、Client: 给用户提供向Flink系统提交用户任务(流式作业)的能力。用户提交一个F…

大型商场借力泛微,实现内外协同招商,合同、铺位、费用统一管理

对即将开业或是面临调整改造的购物中心来说,用什么样的方式才能快速地达成招商目的,实现资产价值的保值和增值,成为商业操盘手们共同面临的难题…… 行业需求 • 建立充足的品牌资源储备,拓宽招商渠道和线索,提高成交…

ElasticSearch-全文检索和分析引擎学习Day01

前言 学习谷粒商城基础片完结后便开启了高级部分的学习,高级部分的第一章节 Elasticsearch 搜索和分析引擎。文档地址:elasticsearch中文文档地址 一、Elasticsearch 简介 1.1 Elasticsearch 是什么? Elasticsearch 是一个分布式的免费开…

入门力扣自学笔记208 C++ (题目编号:895)

895. 最大频率栈​​​​​​ 题目: 设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。 void push(int val) 将一个整数 val 压入栈顶。 int pop() 删除…

Leetcode 85.最大矩形(困难)

一、题目 1、题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例1: 输入:matrix [["1","0","1","0","0&qu…

基于微信小程序奶茶店在线点单管理系统ssm框架-计算机毕业设计

面对目前奶茶店林立的现状,大城市奶茶店多为连锁奶茶店他们都有统一的管理和相应的系统。但是个别小县城和小城以及城区也有不少的奶茶店多为自营,这就必须店长自己管理和采购原料。大型连锁的奶茶店管理系统就不适用于分散的小型奶茶店。小型奶茶店的管…

剑指 Offer 10- II. 青蛙跳台阶问题

一、题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97(1000000007),如计算初始结果为:1000000008,请返回 1。 二、示例 示…

TaWRKY19/61/82激活糖转运蛋白TaSTP3从而增强小麦条锈病敏感性

文章信息 题目:Sugar transporter TaSTP3 activation by TaWRKY19/61/82 enhances stripe rust susceptibility in wheat 刊名:New Phytologist 作者:Baoyu Huai,Zhensheng Kang,Jie Liu et al. 单位:Northwest A&…

【C++】string使用模拟实现

文章目录前言为什么学习string类?1. string函数常用接口介绍1.1 string容器基本概念1.2 string构造函数1.3 string访问和修改1.4 string插入和删除1.5 string赋值操作1.5 string字符串拼接1.7 string查找和替换1.8 string子串1.9 string类对象的容量操作2. string类…

dockerfile编写

dockerfile编写 dcoker 的一个操作和交互的关系流程: dockerfile 编写规则 习惯使用大写非注释行第一行必须是FROM文件名必须是dockerfile指定一个专门的工作目录所有引入的映射文件必须在这个工作空间目录下工作空间不支持隐藏文件(.dockeringore)作用是用于存放不需要打包…