【Redis】Redis缓存

news2024/11/13 11:07:03

目录

一、缓存

1、概念

2、作用

3、缺点

二、缓存模型

三、缓存的更新

1、更新策略

2、主动更新的三种模式

1.cache aside pattern

2.read/write through pattern

3.write behind caching pattern

3、线程安全问题

1.缓存删除还是更新缓存

2.先删除缓存后操作数据库

3.先操作数据库后删除缓存

4.如何保证缓存与数据库操作同时成功或失败

4、最佳选择



一、缓存

1、概念

缓存是数据交换的缓冲区,是数据存储的临时地方,相对来说他的读写性能比较高

2、作用

在web开发中缓存的引入会降低服务器的负载,提高读写效率降低响应时间

3、缺点

使用缓存会存在数据不一致性等问题,导致代码的维护成本变高。

如果在缓存集群的环境下,缓存的使用会消耗更多的人力资源

二、缓存模型

当客户端发送获取数据的请求时,我们先从redis中查询缓存,如果命中也就是缓存中存在数据,直接返回数据,如果缓存未命中,就需要去查询数据库然后将数据作为缓存写入redis 

三、缓存的更新

1、更新策略

当数据库被修改,而客户端查询时查询到缓存里更新前的数据,为了解决这一问题有以下几种策略

内存淘汰超时删除主动更新
说明无需维护,利用redis本身的机制,当内存不足时自动淘汰部分数据,下次查询时更新缓存给缓存的数据加TTL即超时时间,到期后自动删除,下次查询时更新缓存在实现业务逻辑时,查询数据库的同时去更新缓存
一致性
维护成本

2、主动更新的三种模式

1.cache aside pattern

缓存调用者在操作数据库时的同时去更新缓存

2.read/write through pattern

将缓存与数据库作为一个整体的服务,由该服务来维护一致性。调用者只需要调用即可不需要去关心数据一致性问题

3.write behind caching pattern

调用者只需操作缓存,由其他线程异步的去将缓存的数据持久化到数据库,,以此来保证数据的一致性

3、线程安全问题

1.缓存删除还是更新缓存

上述三种模式,方案一虽然需要开发人员自己编码但是可控性比较高。那么我们在更新数据库的时候是将缓存删除还是更新缓存呢?

如果对数据库做了上百次操作,则需要去更新上百次缓存,但是却没有请求来查询,则上百次的更新缓存相当于是无效操作。而如果删除缓存,则查询请求来的时候就会查询数据库并更新缓存。那么我们选择了删除。

2.先删除缓存后操作数据库

此时又有一个问题,我们是先选择删除缓存后操作数据库呢,还是先操作数据库然后删除缓存呢?

先删除缓存后操作数据库,当线程1刚删除缓存时,线程2此时来查询,发现缓存没有,于是查询数据库,此时线程1还没有来得及去更新数据库,于是线程2获取到旧的数据返回并写入缓存,此时线程1更新完数据库。执行完毕时,缓存里的值是旧的,而数据库里确实跟新了的,就会存在线程安全的问题。

3.先操作数据库后删除缓存

先操作数据库后删除缓存,假设缓存由于某种原因失效了,线程1来查询时缓存未命中于是去查询数据库数据,此时线程2再去更新数据,并将缓存删除,此时线程1执行将读取到的旧数据写入缓存,缓存值与数据库不一致存在线程安全问题。

但是后者是在假定缓存失效的情景下,相比而言前者的线程安全问题更严重

4.如何保证缓存与数据库操作同时成功或失败

最后我们如何保证缓存与数据库操作同时成功或失败呢?

在单体系统里,我们可以将这两个操作放在一个事务里来保证,如果在分布式系统下则可以通过TCC等分布式事务来保证

4、最佳选择

如果对数据的一致性需求低,则可以使用默认的内存淘汰机制,对于一致性高的需求则使用主动更新的策略,并以超时删除作为兜底的方案

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

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

相关文章

英特尔让谷歌云破解其新的安全芯片并发现多个漏洞

谷歌云和英特尔在24日发布了对英特尔新硬件安全产品 Trust Domain Extensions (TDX)为期九个月的审计结果。 该分析揭示了 10 个已确认的漏洞,其中两个被两家公司的研究人员标记为重要漏洞,以及五个导致主动更改以进一步加强 TDX 防御的发现。 检查和修…

FPGA中有限状态机的状态编码采用格雷码还是独热码?

有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向哪一状态还是留在原状态不但取决于各个输入…

HAProxy负载均衡架构

目录 一、HAProxy简介1.Haproxy应用分析2.HAProxy的主要特性3.HAProxy常用的负载均衡策略4.LVS、Nginx、HAproxy的区别 二、Haproxy搭建 Web 群集1.haproxy 服务器部署2.编译安装 Haproxy3.Haproxy服务器配置4.添加haproxy 系统服务5.节点服务器部署6.启动haproxy服务7.日志定义…

LIST、SET、Queue

Java 集合概览Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的…

CloudCompare比较点云并统计特定距离误差范围内的点数

文章目录 1.导入点云2.旋转或平移某个点云3.配准点云3.点云差异比较4.统计特定误差范围内的点云数量 1.导入点云 点击文件夹图标,选择要导入到CC(CloudCompare)处理的两个点云,最终可看到点云目录树: 2.旋转或平移某个…

配置出接口方式的单服务器智能DNS

组网需求 如图1所示,企业部署了一台ISP1服务器对外提供Web服务,域名为www.example.com。ISP1服务器的私网IP地址为10.1.1.10,服务器映射后的公网IP地址为1.1.1.10。企业的DNS服务器上存在域名www.example.com与ISP1服务器地址1.1.1.10的对应关…

如何在微服务下保证事务的一致性 | 京东云技术团队

作者:京东科技 苗元 背景 随着业务的快速发展、业务复杂度越来越高,传统单体应用逐渐暴露出了一些问题,例如开发效率低、可维护性差、架构扩展性差、部署不灵活、健壮性差等等。而微服务架构是将单个服务拆分成一系列小服务,且这…

静态分析和动态分析

在开发早期,发现并修复bug在许多方面都有好处。它可以减少开发时间,降低成本,并且防止数据泄露或其他安全漏洞。特别是对于DevOps,尽早持续地将测试纳入SDLC软件开发生命周期是非常有帮助的。 这就是动态和静态分析测试的用武之地…

如何在 Ubuntu 20.04 系统上安装 Docker方法和使用

0. docker的例子,ubuntu中运行docker例子应用 1.首先对docker环境进行安装,我这里是ubuntu20.04的系统,进行演示,更新 apt 包索引 sudo apt update2.安装依赖包 sudo apt install apt-transport-https ca-certificates curl gn…

BatteryChargingSpecification1.2中文详解

1. Introduction 1.1 Scope 规范定义了设备通过USB端口充电的检测、控制和报告机制,这些机制是USB2.0规范的扩展,用于专用 充电器(DCP)、主机(SDP)、hub(SDP)和CDP(大电流充电端口)对设备的充电和power up。这些机制适用 于兼…

从校园跑腿系统看当代青年的消费观念与行为习惯

当代大学生的消费观念和行为习惯正在发生着巨大的变化,他们越来越注重方便、快捷和贴近自己的消费体验。在这一背景下,校园跑腿系统应运而生,成为了解决学生日常生活中烦恼的新选择。 ​校园跑腿系统是一款基于互联网技术、致力于提供高效、…

做好韩语同声传译,译员需要具备这些能力!

我们知道,同声传译是口译的高级形式,难度比较大,对译员的综合能力要求非常高。那么,针对同声传译的韩语翻译,译员需要具备什么条件,如何翻译效果比较好? 据了解,韩语同声传译是一项高…

会声会影2023最新中文旗舰版新功能介绍

会声会影Corel VideoStudio2023一款功能丰富的视频编辑软件。具有拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。优化分屏剪辑功能,简化多时间轴编辑的工作流程&#x…

数字硬件建模SystemVerilog-通信总线建模 --Interface和modport

来到了SV最后一部分,预计三篇文章,两周更完,所有的思维导图如下: 概述 SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。在其最简单的形式中,Interface端口将相关的…

使用Tailwind CSS创建自定义动画,进阶您的前端开发技能

从零开始,探索如何使用 TailwindCSS 自定义动画 Tailwind CSS是一种颠覆性的CSS框架,改变了开发者处理前端开发的方式。它的低级性和移动优先的方法使得它成为设计独特、响应式和可扩展的网页设计的热门选择。此外,它还具有强大的动画支持&am…

13共模电感

目录 一、原理 二、差模噪声和共模噪声主要来源 三、共模电感如何抑制共模信号 四、共模电感的选取 一、原理 在介绍共模电感之前先介绍扼流圈,扼流圈是一种用来减弱电路里面高频电流的低阻抗线圈。为了提高其电感扼流圈通常有一软磁材料制的核心。共模扼流圈有…

Django企业it资产管理系统

背景 21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的公司都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发企业it资产管理系统意义和用处…

JavaWeb开发学习笔记_Vue

JavaWeb开发学习笔记_Vue Vue快速入门常用指令v-bind和v-modelv-onvif和vshowvfor 案例生命周期参考 Vue快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…

Windows上使用CLion配置OpenCV环境,亲测可用的方法(一)

一、Windows上使用CLion配置OpenCV环境&#xff0c;亲测可用的方法&#xff1a; Windows上使用CLion配置OpenCV环境 教程里的配置&#xff1a; widnows 10 clion 2022.1.1 mingw 8.1.0 opencv 4.5.5 Cmake3.21.1 我自己的配置&#xff1a; widnows 10 clion 2022.2.5 mingw 8.…

Flink 2.0 启航,开启全新篇章

我们已经在开发者邮件列表上发起了关于 Flink 2.0 版本计划的讨论。我们相信现在是时候启动这个计划了&#xff0c;以便在明年作为 Apache Flink 的十周年庆典推出这个版本。欢迎大家参加关于 Flink 2.0 的愿景、功能、时间表、流程、路线图等方面的讨论&#xff01; 开发者邮件…