百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis之旁路缓存(redis缓存策略哪几种)

mhr18 2024-11-05 10:22 78 浏览 0 评论

Redis之旁路缓存

Redis作为缓存中间件早已深入人心,但我们有没有想过Redis为什么能作为缓存呢?Redis到底怎样使用缓存呢?本篇文章详细聊聊。

Redis为什么能作为缓存

聊Redis为什么能作为缓存前先需要清楚缓存的作用,我们在很多场景都有接触过缓存就如Redis本身的输入输出缓存、复制缓冲区、复制积压缓存区等等,又如操作系统本身的LLC,page cache缓存等等,这些缓存的主要作用是什么呢?是在一个多层次系统中平衡上下级系统的速度差异。

这里以操作系统为例说明,操作系统的存储结构一般为CPU、内存、磁盘三大块,其中CPU读取速度最快只有几十纳秒,内存读取需要100多纳秒,而磁盘的读取速度是毫秒,这样看可能没有什么对比效果,我们看下下面的单位换算,内存和磁盘的速度差异可是差了数量级的。

1秒 = 1000 毫秒 = 1000000 微秒 = 1000000 纳秒

根据木桶定理,一个木桶装多少水是由木桶的最短板决定,所以在操作系统上如果处理数据,磁盘的读取过慢,CPU将空闲大量的时间,这显然是不合理的,所以引入了缓存的概念。

  • CPU中的末级缓存即LLC用于平衡CPU和内存间的速度差异,避免每次从内存中取数据。
  • 内存中高速缓存页即page cache,用于平衡内存和磁盘中的速度差异,避免每次都从磁盘中取数据。

看到这里就可以得到缓存的一些特征如下

  • 第一在一个多层次系统上缓存一定是一个快速的系统,这样才能平衡层次系统的速度差异。
  • 第二CPU、内存中包含的缓存比它需要平衡的系统小,如LLC就不可能存下内存中的所有数据,所以我们需要有内存淘汰的思想。

到这里缓存的特性就聊完了,那么Redis是否符合呢?显然是可以的

  • Redis运行在内存中而且存在丰富的数据结构以及应用了多路复用IO模型,速度上远超其它数据库,符合第一点速度快的要求。
  • Redis本身自带内存淘汰机制,能根据淘汰规则自动淘汰键值,符合内存淘汰要求。

旁路缓存使用

使用缓存一般的操作都是

  • 读取数据前先从Redis中读取。
  • 如果读取数据在缓存中不存在就需要在数据库中读取。
  • 更新缓存。

那么这些操作是怎么进行的呢?这就和旁路缓存有关,下面详细聊聊。

什么叫旁路缓存

Redis应用于生产上一般是一个独立的程序和业务程序分开,只能被动等待客户端的调用,我们如果在程序中使用还要加入Redis的调用代码,所以我们也将Redis称为旁路缓存,读取缓存和更新缓存都是在业务系统中完成。这和上面提到的操作系统的CPU缓存LLC,内存缓存page cache有本质区别,LLC和page cache从系统初始化就存在系统调用的主路径上,不需要其它业务系统主动调用。

缓存类型

Redis根据请求的类型分为只读缓存和读写缓存,这是针对客户端发送的写请求是否在Redis中修改进行区分。

只读缓存

只读缓存只提升缓存的读性能,当客户端发送一个读请求时Redis从缓存中查找是否存在,如果存在直接返回,不存在就从数据库获取,写入缓存中同时返回客户端,如果是写请求,直接修改数据库数据然后将缓存中的对应键值删除。

这样可以保证数据库中的数据都是最新的,而且数据不会丢失。

读写缓存

读写缓存可以提升读写效率,这与只读缓存不同的是,读写缓存会在Redis中做增删改的操作,Redis中的数据将是最新的一份,这样就能快速的响应客户端,但是数据一直放在内存中显然是不可靠的,如果出现Redis宕机将丢失数据,所以这里又提供了两种写回数据库的策略,同步写回和异步写回。

同步写回表示,当客户端发送一个写请求过来会同时更新缓存和数据库,两者全部更新完毕才会返回,这样会降低处理性能,但能提升可靠性。

异步写回表示,当客户端发送一个写请求过来会先更新缓存,更新完后直接返回客户端,仅当写入后的数据淘汰出内存后才会写入数据库,这样保证了性能,但是可靠性降低了。

如何选择缓存类型

需要根据业务出发,如果是读多写少的场景,那么使用只读缓存就可以解决,而需要给写加速的场景肯定选择读写缓存但使用读写缓存需要注意数据写回策略,需要在数据可靠性和性能两个方面做取舍。

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: