深入探讨关于Redis的底层

news2024/11/29 2:36:19

1.1为什么Redis存储比关系型数据库快:

数据存储在内存中(比如企业项目中用户表中有一个亿的用户,如果再来注册一个用户,或者登录,必须先判断是否有这个数据,这个时候如果直接查询数据库的话,对服务器的压力是非常大的,而且返回的数据效率也不高,因为关系型数据库是将数据保存到磁盘中去的,这里又要考虑到网路传输的速度,所以直接查询Redis存储比较好

单线程处理请求

高效的数据结构

异步 I/O

高效的持久化机制

1.2Redis存储具有的特定功能:

缓存:Redis 可以作为缓存系统,将热点数据存储在内存中,提高读写性能和响应速度,减少对后端数据存储的压力。

消息队列:Redis 的发布订阅功能和 List 数据结构可以实现消息队列的功能,实现异步处理任务、解耦系统组件之间的依赖关系等。

为什么使用消息队列:

【回答:1.业务解耦,2实现异步,3.流量削峰填谷(时间换空间)
消息队列:
    同步:
        优点:时效性 强,立即得到结果
        缺点:1.耦合度高(加业务导致改代码困难)
、                2.性能:每次执行调用需要等待上一个进程走完之后才进行
                   3.cpu资源浪费,等待需要执行后再执行
                   4.练级失败,一个服务或者进程甭溃,会导致集体阵亡
    异步:
        优点:1.降低耦合度,2.cpu资源运用合理,3.流量削峰填谷(时间换空间)
        缺点:效率没有同步高

计数器和排行榜:Redis 的原子操作和 Sorted Set 数据结构可以实现计数器和排行榜的功能,支持快速地增加、减少和排序操作。

消息队列模型:

生产者(Producer)、消费者(Consumer)、消息(Message)和消息队列(MessageQueue)。生产者和消费者类负责将消息发送到消息队列和从消息队列中获取消息。消息类包含消息主体、时间戳和主题等信息。消息队列类负责存储消息列表,并提供添加、获取和确认消息的方法。

生产者和消费者类与消息类之间是一对一的关系,表示一个生产者或消费者可以与一个消息相关联。生产者和消费者类与消息队列类之间是一对多的关系,表示一个生产者或消费者可以与多个消息队列相关联。消息队列类与消息类之间是一对多的关系,表示一个消息队列可以包含多个消息。

1.3Redis存储数据类型:

  1. String(字符串类型)常见使用场景是:存储 Session 信息、存储缓存信息(如详情页的缓存)、存储整数信息,可使用 incr 实现整数+1,和使用 decr 实现整数 -1;
  2. List(列表类型)常见使用场景是:实现简单的消息队列、存储某项列表数据;
  3. Hash(哈希表类型)常见使用场景是:存储用户,Session 信息、存储商品的购物车,购物车非常适合用哈希字典表示,使用人员唯一编号作为字典的 key,value 值可以存储商品的 id 和数量等信息、存储详情页信息;
  4. Set(集合类型)是一个无序并唯一的键值集合,它的常见使用场景是:关注功能,比如关注我的人和我关注的人,使用集合存储,可以保证人员不会重复;
  5. Sorted Set(有序集合类型)相比于 Set 集合类型多了一个排序属性 score(分值),它的常见使用场景是:可以用来存储排名信息、关注列表功能,这样就可以根据关注实现排序展示了。

1.4Redis在使用中常见的三种问题:

  1. 雪崩(Cache Avalanche):雪崩是指当缓存系统中的大量缓存同时失效或清空时,请求将直接访问数据库,导致数据库压力骤增,性能急剧下降。这种情况可能发生在缓存过期时间设置不合理、服务器宕机、网络故障等情况下。为了避免雪崩效应,可以采取的措施包括合理设置缓存的过期时间、使用分布式缓存、通过多级缓存策略等。

  2. 穿透(Cache Penetration):穿透是指恶意请求或者非法请求绕过缓存直接访问数据库,由于缓存中不存在相应的数据,导致请求一直到达数据库。这种情况可能发生在攻击者故意构造不存在的数据进行请求,如果没有有效的防护措施,会导致数据库负载过高。为了避免穿透,可以在缓存层设置布隆过滤器或者简单的缓存空结果,来过滤无效请求。

  3. 击穿(Cache Breakdown):击穿是指在高并发情况下,某个热点数据过期后,大量请求同时访问数据库,导致数据库压力过大。与雪崩不同的是,击穿通常是由于某个特定的缓存项失效引起的,而其他缓存项仍然有效。为了避免击穿,可以采取的措施包括使用锁机制(例如分布式锁)来实现热点数据的单线程访问、及时更新缓存数据等。

1.4总结图

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

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

相关文章

Java+springboot+vue智慧校园源码,数据云平台Web端+小程序教师端+小程序家长端

技术架构: Javaspringbootvue element-ui小程序电子班牌:Java Android演示自主版权。 智慧校园电子班牌人脸识别系统全套源码,包含:数据云平台Web端小程序教师端小程序家长端电子班牌 学生端。 电子班牌系统又称之为智慧班牌&am…

分布式之任务调度学习一

1 任务调度 1.1 什么时候需要任务调度? 1.1.1 任务调度的背景 在业务系统中有很多这样的场景: 1、账单日或者还款日上午 10 点,给每个信用卡客户发送账单通知,还款通知。如何判断客户的账单日、还款日,完成通知的发…

类加载机制之双亲委派模型、作用、源码、SPI打破双亲委派模型

双亲委派模型 双亲委派工作机制双亲委派的作用双亲委派的实现源码SPI打破双亲委派 应用程序是由三种类加载器相互配合,从而实现类加载,除此之外还可以加入自己定义的类的加载器。 类加载器之间的层次关系,称为双亲委派模型(Parent…

飞腾Ubantu22.04.3安装OpenNebula测试

目前只有one服务能够启动成功,sunstone-server nodejs 构建存在问题。 1.概述 因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包,借此用源码编译进行测试。 2.官网github地址 下载解压存放在服务器上: https://github.com/O…

轻量检测模型PP-PicoDet解析

Paper:PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices official implementation:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.7/configs/picodet Backbone 作者通过实验发现,ShuffleNetV2在移动…

2024第一篇: 架构师成神之路总结,你值得拥有

大家好,我是冰河~~ 很多小伙伴问我进大厂到底需要怎样的技术能力,经过几天的思考和总结,终于梳理出一份相对比较完整的技能清单,小伙伴们可以对照清单提前准备相关的技能,在平时的工作中注意积累和总结。 只要在平时…

Apache Commons BCEL与Java字节码操作

第1章:Apache Commons BCEL简介 大家好,我是小黑,咱们今天来聊聊Apache Commons BCEL(Byte Code Engineering Library)。你可能会问,BCEL是什么鬼?别急,小黑这就给你娓娓道来。BCEL…

Hadoop入门学习笔记——八、数据分析综合案例

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 八、数据分析综合案例8.1. 需求分析8.1.1. 背景介绍8.1.2…

基于Python实现二手房整体情况可视化分析+房价预测【500010099】

项目描述 通过房天下兰州二手房信息,对数据进行进一步清洗处理,分析各维度的数据,筛选对房价有显著影响的特征变量,探索兰州二手房整体情况、价格情况和价格的影响因素,建立房价预测模型。 提出问题 探究单价、数量…

SVN服务端的下载、安装

地址 : Apache Subversion Binary Packages 下载 点击 VisualSVN 安装 都是点击 next 点击next ,即可安装成功

代码随想录算法训练营第五十七天|647. 回文子串、516.最长回文子序列、动态规划总结篇

代码随想录 (programmercarl.com) 647. 回文子串 1.dp数组及下标含义 我们在判断字符串S是否是回文,那么如果我们知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果相同的话&…

矩阵式键盘按键音

#include<reg51.h> //包含51单片机寄存器定义的头文件 sbit soundP3^7; //将sound位定义为P3.7 /************************************************************** 函数功能&#xff1a;蜂鸣器发声延时约120ms *************************************************…

Linux 内核调试

文章目录 一、方法论 一、方法论 qemu 虚拟机 Linux内核学习 Linux 内核调试 一&#xff1a;概述 Linux 内核调试 二&#xff1a;ubuntu20.04安装qemu Linux 内核调试 三&#xff1a;《QEMU ARM guest support》翻译 Linux 内核调试 四&#xff1a;qemu-system-arm功能选项整…

大数据毕业设计:租房推荐系统 python 租房大数据 爬虫+可视化大屏 计算机毕业设计(附源码+文档)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

年度征文|回顾2023我的CSDN

一年转眼而逝&#xff0c;回顾这一年在csdn的创作&#xff0c;学习&#xff0c;记录历程。回顾过去&#xff0c;才能展望未来&#xff0c;首先看图说话。 今年在csdn的访问量已由年初的2万到年末的50w。粉丝有年初的300个左右&#xff0c;增加到4000个左右。我年初的目标是粉丝…

Dockerfile语法和简单镜像构建

Dockerfile是一个用于定义Docker镜像的文本文件&#xff0c;包含了一系列的指令和参数&#xff0c;用于指示Docker在构建镜像时应该执行哪些操作&#xff0c;例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。 Dockerfile文件的内容主要有几个部分组成&#xff0c…

算法——BFS解决FloodFill算法

什么是FloodFill算法 中文&#xff1a;洪水灌溉。假设这一块4*4的方格是一块土地&#xff0c;有凸起的地方&#xff0c;也有凹陷的地方&#xff08;凹陷的地方用负数表示&#xff09;。此时下大雨发洪水&#xff0c;会把凹陷的地方填满。绿色圈起来的属于一块区域&#xff08;…

caj转换成pdf有哪些方法?

caj转换成pdf有哪些方法&#xff1f;PDF是一个被广泛支持的文件格式&#xff0c;这种格式基本上在所有的操作系统和设备上都是支持使用的&#xff0c;也能够将PDF文件打开和查看的&#xff0c;相比于caj文件&#xff0c;它就只能通过一下特定的软件或者是插件才能够将caj打开或…

3.2.1CURRENT 、3.2.2-SNAPSHOT、3.1.7GA 这三者的springboot版本之前有什么区别

在Spring Boot中&#xff0c;版本号通常遵循主要版本.次要版本.修补版本的格式&#xff0c;有时后面会跟着一个额外的标签来表示版本的特殊性质。根据您提供的版本号 “3.2.1CURRENT”、“3.2.2-SNAPSHOT” 和 “3.1.7GA”&#xff0c;我们可以解释这些版本的含义和它们之间的区…

用贪心算法编程求解任务安排问题

题目&#xff1a;用贪心算法编程求解以下任务安排问题 一个单位时间任务是恰好需要一个单位时间完成的任务。给定一个单位时间任务的有限集S。关于S的一个时间表用于描述S中单位时间任务的执行次序。时间表中第1个任务从时间0 开始执行直至时间1 结束&#xff0c;第2 个任务从时…