当前位置: 首页 > news >正文

Redis实战(3)——缓存模型与缓存更新策略

1 什么是缓存?

缓存就是数据交换的缓冲区, 是存贮数据的临时区,一般读写性能较高 \textcolor{red}{是存贮数据的临时区,一般读写性能较高} 是存贮数据的临时区,一般读写性能较高。缓存可在多个场景下使用

在这里插入图片描述

以一次 w e b 请求为例,演示不同阶段的缓存作用 \textcolor{blue}{以一次web请求为例,演示不同阶段的缓存作用} 以一次web请求为例,演示不同阶段的缓存作用

  • web开发时:浏览器发送请求时通常会缓存不经常变更静态文件,如css、js文件。浏览器缓存无需每次请求进行加载,降低网络延迟,提升响应速度
  • 应用层缓存:请求到达Tomcat 服务器时,常用redis【具有优秀的读写能力,延迟在毫秒级别】作为缓存,可缓存经常从数据库中获得的数据。
  • 数据库缓存:应用层缓存未命中时,请求到达数据库,任然可以针对数据库方面做缓存处理,SQL语句相同的查询结果会被缓存下来
  • CPU、磁盘缓存:DB的操作需要进行磁盘的读写以及cpu 的计算,可使用CPU缓存以及磁盘缓存

2 Redis 缓存模型

由于redis是基于内存实现的数据库,数据的读写快,且可以将redis做为集群部署,意味着高可用。所以通常可用redis数据库作为应用程序的缓存区。其缓存模型如下
在这里插入图片描述
(1)请求从客户端发出,经由redis时,命中则直接缓存,

(2)请求从客户端发出,经由redis时,未命中缓存,需要经过数据库处理【低效】,获得数据后写入缓存

(3) 随着请求的不断发出,redis累计的缓存数据越来越多,请求直接命中redis缓存的几率增大,大大减少了数据库的低效操作。

R e d i s 缓存是把双刃剑 \textcolor{red}{Redis缓存是把双刃剑} Redis缓存是把双刃剑 ,尽管他能降低后端的负载、提升程式的性能。但是在 数据一致性成本变高 \textcolor{blue}{数据一致性成本变高} 数据一致性成本变高。且由于使用redis数据库,其运维成本变高。

3 Redis 缓存更新策略

为了使得缓存中的数据与DB中的数据保持一致,需要介绍redis缓存的更新策略

内存淘汰超时剔除主动更新
说明不用自己维护,利用redis的内存淘汰机制。当内存不足时自动淘汰部分数据,下次查询时更新缓存给缓存数据添加TTL时间,到期后自动删除缓存,下次查询时更新缓存编写业务逻辑,在修改数据库的同时,更新缓存
一致性差【淘汰时间不确认,由redis底层决定】一般
维护成本

在实际选用缓存更新策略时,需要根据业务场景来选择
业务场景

  1. 低一致性需求: 使用内存淘汰机制,
  2. 高一致性需求:主动更新,并以超时剔除作为兜底解决方案

相关文章:

Redis实战(3)——缓存模型与缓存更新策略

1 什么是缓存? 缓存就是数据交换的缓冲区, 是存贮数据的临时区,一般读写性能较高 \textcolor{red}{是存贮数据的临时区,一般读写性能较高} 是存贮数据的临时区,一般读写性能较高。缓存可在多个场景下使用 以一次 w e b 请求为例…...

python与深度学习(十):CNN和cifar10二

目录 1. 说明2. cifar10的CNN模型测试2.1 导入相关库2.2 加载数据和模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章训练的模型进行测试。首…...

剑指offer12 矩阵中的路径 13 机器人的运动范围 34.二叉树中和为某一值得路径

class Solution { public:bool exist(vector<vector<char>>& board, string word) {int rowboard.size(),colboard[0].size();int index0,i0,j0;if(word.size()>row*col) return 0;//vector<vector<int>> visit[row][col];//标记当前位置有没有…...

Pushgateway+Prometheus监控Flink

思路方案 FlinkMtrics->pushgateway->prometheus->grafnana->altermanager 方案 : Flink任务先将数据推到pushgateway。然后pushgateway将值推送到prometheus,最后grafana展示prometheus中的值, 去这个 https://prometheus.io/download/ 下载最新的 Prometheu…...

OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG

视频分割背景 1.概念介绍2. 函数介绍MOG算法MOG2算法GMG算法 原视频获取链接 1.概念介绍 视频背景扣除原理&#xff1a;视频是一组连续的帧&#xff08;一幅幅图组成&#xff09;&#xff0c;帧与帧之间关系密切(GOP/group of picture)&#xff0c;在GOP中&#xff0c;背景几乎…...

nginx 反向代理浅谈

前言 通常情况下&#xff0c;客户端向Web服务器发送请求&#xff0c;Web服务器响应请求并返回数据。而在反向代理中&#xff0c;客户端的请求不直接发送到Web服务器&#xff0c;而是发送到反向代理服务器。反向代理服务器会将请求转发给真实的Web服务器&#xff0c;Web服务器响…...

【概率预测】对风力发电进行短期概率预测的分析研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

原型设计模式go实现尝试

文章目录 前言代码结果总结 前言 本文章尝试使用go实现“原型”。 代码 package mainimport ("fmt" )// 不同原型标志枚举 type Type intconst (PROTOTYPE_1 Type iotaPROTOTYPE_2 )// 原型接口 type IPrototype interface {Clone() IPrototypeMethod(value int)P…...

链表是否有环、环长度、环起点

问题引入 如何检测一个链表是否有环&#xff0c;如果有&#xff0c;那么如何确定环的长度及起点。 引自博客&#xff1a;上述问题是一个经典问题&#xff0c;经常会在面试中被问到。我之前在杭州一家网络公司的电话面试中就很不巧的问到&#xff0c;当时是第一次遇到那个问题&…...

有效文档管理离不开这几个特点

在我们日常生活中经常会遇到各式各样的文档类型&#xff0c;想要把它们都统一管理起来也不是一件容易的事情。后来looklook就去研究怎么样可以把这一堆文档整理起来呢&#xff1f;接下来&#xff0c;looklook就从有效的文档管理展开&#xff0c;和大家分享一下&#xff01; 有效…...

爬虫-requests-cookie登录古诗文网

一、前言 1、requests简介 requests是一个很实用的Python HTTP客户端库&#xff0c;爬虫和测试服务器响应数据时经常会用到&#xff0c;它是python语言的第三方的库&#xff0c;专门用于发送HTTP请求&#xff0c;使用起来比urllib更简洁也更强大。 2、requests的安装 pip i…...

Spring Boot实践三 --数据库

一&#xff0c;使用JdbcTemplate访问MySQL数据库 1&#xff0c;确认本地已正确安装mysql 按【winr】快捷键打开运行&#xff1b;输入services.msc&#xff0c;点击【确定】&#xff1b;在打开的服务列表中查找mysql服务&#xff0c;如果没有mysql服务&#xff0c;说明本机没有…...

分布式锁漫谈

简单解释一下个人理解的分布式锁以及主要的实现手段。 文章目录 什么是分布式锁常用分布式锁实现 什么是分布式锁 以java应用举例&#xff0c;如果是单应用的情况下&#xff0c;我们通常使用synchronized或者lock进行线程锁&#xff0c;主要为了解决多线程或者高并发场景下的共…...

mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目

m系列 mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目 gptlink 项目是一个前后端一体化的 chatgpt 开源项目 gptlink 项目地址&#xff1a;https://github.com/gptlink/gptlink 安装 php 8.0 版本&#xff1a; brew install php8.0安装完成后提示如下&#xff…...

ansible中run_once的详细介绍和使用说明

在Ansible中&#xff0c;run_once是一个用于控制任务在主机组中只执行一次的关键字参数。当我们在编写Ansible任务时&#xff0c;有时候我们希望某个任务只在主机组中的某个主机上执行一次&#xff0c;而不是在每个主机上都执行。 以下是run_once参数的详细说明和用法&#xf…...

短视频矩阵系统源码开发流程​

一、视频矩阵系统源码开发流程分为以下几个步骤&#xff1a; 四、技术开发说明&#xff1a; 产品原型PRD需求文档产品交互流程图部署方式说明完整源代码源码编译方式说明三方框架和SDK使用情况说明和代码位置平台操作文档程序架构文档 一、抖音SEO矩阵系统源码开发流程分为以…...

vite+vue3 css scss PC移动布局自适应

1. 安装 postcss-pxtorem 和 autoprefixer npm install postcss-pxtorem autoprefixer --save2. vite.config.js引入并配置 import postCssPxToRem from postcss-pxtorem import autoprefixer from autoprefixerexport default defineConfig({base: ./,resolve: {alias},plug…...

BLE配对和绑定

参考&#xff1a;一篇文章带你解读蓝牙配对绑定 参考&#xff1a;BLE安全之SM剖析(1) 参考&#xff1a;BLE安全之SM剖析&#xff08;2&#xff09; 参考&#xff1a;BLE安全之SM剖析(3) 目录 前言基本概念解读Paring(配对)Bonding(绑定&#xff09;STK短期秘钥、LTK长期秘钥等 …...

无涯教程-jQuery - html( val )方法函数

html(val)方法设置每个匹配元素的html内容。此属性在XML文档上不可用。 html( val ) - 语法 selector.html( val ) 这是此方法使用的所有参数的描述- val - 这是要设置的html内容。 html( val ) - 示例 以下是一个简单的示例&#xff0c;简单说明了此方法的用法- <…...

【单链表OJ题:删除链表中等于给定值 val 的所有节点】

1.删除链表中等于给定值 val 的所有节点 题目来源 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 /*** Definition for singly-linked list.* struct ListNode {* int val;* s…...

Python基础语法:生成器 generator(yield)

一、简介根据指定的规则循环生成数据&#xff0c;当条件不成立时则生成数据结束。数据不是一次性全部生成出来&#xff0c;而是使用一个&#xff0c;再生成一个&#xff0c;好处是可以节约大量的内存。就像设计模式中的懒汉式。适合处理大数据或流数。生成器是一种特殊的迭代器…...

Midjourney锐化效果失效真相(2024官方未公开的渲染管线瓶颈解析)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney锐化效果失效真相&#xff08;2024官方未公开的渲染管线瓶颈解析&#xff09; 自2024年V6.2版本起&#xff0c;大量用户反馈 --stylize 与 --sharp 参数组合下图像边缘锐化效果显著弱化&am…...

LangGraph状态机工程:构建复杂AI工作流的完整指南

传统RAG&#xff08;检索增强生成&#xff09;在处理简单的"单跳"问题时表现良好——“文章里提到了什么” “这个概念是什么意思”——但当问题涉及多个实体之间的关系、需要跨多个文档推理时&#xff0c;传统RAG就显得力不从心。GraphRAG&#xff08;Graph-based R…...

Unity事件系统实战:用事件驱动重构你的金币拾取逻辑(告别硬编码)

Unity事件系统实战&#xff1a;用事件驱动重构你的金币拾取逻辑&#xff08;告别硬编码&#xff09;在游戏开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;玩家拾取金币后&#xff0c;需要更新UI、播放音效、解锁成就、保存数据……如果把这些逻辑全部写在金币拾取的代…...

基于SMD与贝壳的微型音频装置:从电路设计到嵌入式开发的完整实践

1. 项目概述&#xff1a;一个藏在贝壳里的声音世界你小时候有没有捡起一个海螺壳&#xff0c;把它贴在耳边&#xff0c;然后听到里面传来“呜呜”的海风声&#xff1f;那个瞬间&#xff0c;仿佛整个海洋都被装进了小小的贝壳里。今天这个项目&#xff0c;就是把那个童年的魔法&…...

告别枯燥理论!用Unity脚本生命周期与预制体玩转一个“会变身的敌人”

用Unity打造会变身的敌人&#xff1a;脚本生命周期与预制体的实战应用在游戏开发中&#xff0c;敌人AI的行为设计往往是新手开发者最感兴趣也最容易感到困惑的部分。Unity的脚本生命周期和预制体系统为这类需求提供了强大支持&#xff0c;但教科书式的讲解常常让学习者陷入枯燥…...

03 - 变量与数据类型

03 - 变量与数据类型 变量是编程里最基础的概念&#xff0c;相当于你往电脑里存东西的"容器"。这章我们把变量的命名规则、Python 的几种基本数据类型都过一遍。 变量是什么 说白了&#xff0c;变量就是一个有名字的盒子。你往里面放个东西&#xff0c;以后想用这个…...

Log4Shell漏洞深度解析:Spring Boot日志注入原理与四层修复方案

1. 这个漏洞不是“远程执行代码”那么简单——它是一次对Java生态信任链的系统性击穿Log4j CVE-2021-44228&#xff0c;业内常简称为“Log4Shell”&#xff0c;2021年12月爆发时&#xff0c;我正在给一家金融客户的Spring Boot微服务集群做灰度发布前的安全加固。凌晨三点收到告…...

3大技术突破:重新定义Switch游戏安装性能极限

3大技术突破&#xff1a;重新定义Switch游戏安装性能极限 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解版Nintendo…...

ROS机器人仿真架构解析:基于wpr_simulation的移动操作机器人技术实现

ROS机器人仿真架构解析&#xff1a;基于wpr_simulation的移动操作机器人技术实现 【免费下载链接】wpr_simulation 项目地址: https://gitcode.com/gh_mirrors/wp/wpr_simulation 在机器人操作系统(ROS)开发领域&#xff0c;硬件依赖和测试成本一直是制约算法迭代效率的…...