L03_Redis知识图谱

这些知识点你都掌握了吗?大家可以对着问题看下自己掌握程度如何?对于没掌握的知识点,大家自行网上搜索,都会有对应答案,本文不做知识点详细说明,只做简要文字或图示引导。


Redis 全景图

Redis 知识全景图都包括什么呢?简单来说,就是“两大维度,三大主线”。

Redis 问题画像

在学习和使用的过程中,你可以完善这张图,把你自己实践或掌握到的新知识点,按照“问题 --> 主线 --> 技术点”的方式梳理出来,放到这张图上。

基础篇

基本架构:一个键值数据库包含什么?


数据结构

有哪些底层数据结构

  • 3.0 版本中 List 对象的底层数据结构由「双向链表」或「压缩表列表」实现;
  • 3.2 版本之后,List 数据类型底层数据结构是由 quicklist 实现;
  • 5.0新设计,7.0 版本之后,压缩列表已废弃,由 listpack 数据结构来实现。

键和值用什么结构组织

为了实现从键到值的快速访问,Redsi 使用了一个哈希表来保存所有键值对。

  • 哈希表的冲突问题和rehash可能带来的操作阻塞**。Redis 解决哈希冲突的方式,就是渐进式 rehash**。
压缩列表


quicklist

通过控制每个链表节点中的压缩列表的大小或者元素个数,来规避连锁更新的问题。因为压缩列表元素越少或越小,连锁更新带来的影响就越小,从而提供了更好的访问性能。

quicklist 会控制 quicklistNode 结构里的压缩列表的大小或者元素个数,来规避潜在的连锁更新的风险,但是这并没有完全解决连锁更新的问题。

listpack

listpack 采用了压缩列表的很多优秀的设计,比如还是用一块连续的内存空间来紧凑地保存数据,并且为了节省内存的开销,listpack 节点会采用不同的编码方式保存不同大小的数据。
listpack 没有压缩列表中记录前一个节点长度的字段了,listpack 只记录当前节点的长度,当我们向 listpack 加入一个新元素的时候,不会影响其他节点的长度字段的变化,从而避免了压缩列表的连锁更新问题

高性能IO模型:为什么单线程的Redis能那么快?

Redis 是单线程,主要指 Redis 的网络 IO 和键值对读写是由一个线程完成的

为什么单线程就能那么快?

  • 一是Redis 大部分操作在内存上完成,并且采用了高效的数据结构;
  • 二是采用多路复用,能保证在网络IO钟可以并发处理大量的客户端请求,实现高吞吐量。

Linux 中的 IO 多路复用机制是一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制。简单来说,**在 Redis 中值运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。**内核会一直监听这些套接字上的连接请求或数据请求。一旦有请求到达,就会交给 Redis 线程处理,这就实现了一个 Redis 线程处理多个 IO 流。

持久化:AOF日志和RDB快照

AOF 日志


优点

  • 写后日志,可以避免出现记录错误命令的情况
  • 在命令执行后才记录日志,不会阻塞当前的写操作。

风险

  • 刚执行完第一步命令就宕机了,那么这个命令和相应的数据就有丢失的风险。
  • 可能给下一个操作带来阻塞风险,因为AOF也是在主线程中执行的,如果在把日志写入磁盘时,磁盘压力大,就会导致写盘慢,进而导致后续操作无法执行。

分析发现,这两个风险都和AOF写回磁盘时机相关,这就意味着,我们如果能够控制一个写命令执行完后AOF 日志写回磁盘的时

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL连接IDEA(Java Web)保姆级教程

第一步:新建项目(File)->Project 第二步:New Project(JDK最好设置1.8版本与数据库适配,详细适配网请到MySQL官网查询MySQL :: MySQL 8.3 Reference Manual :: Search Results) 第三步:点中MySQLTest(项目名)并连续双击shift键-…

昇思25天学习打卡营第2天|数据集Dataset

学习目标:熟练掌握mindspore.dataset mindspore.dataset中有常用的视觉、文本、音频开源数据集供下载,点赞、关注收藏哦 了解mindspore.dataset mindspore.dataset应用实践 拓展自定义数据集 昇思平台学习时间记录: 一、关于mindspore.dataset minds…

【STM32】在标准库中使用定时器

1.TIM简介 STM32F407系列控制器有2个高级控制定时器、10个通用定时器和2个基本定时器。通常情况下,先看定时器挂在哪个总线上APB1或者APB2,然后定时器时钟需要在此基础上乘以2。 2.标准库实现定时中断 #ifndef __BSP_TIMER_H #define __BSP_TIMER_H#if…

.[emcrypts@tutanota.de].mkp勒索病毒新变种该如何应对?

引言 在数字化时代,随着信息技术的迅猛发展,网络安全问题日益凸显。其中,勒索病毒作为一种极具破坏力的恶意软件,给个人和企业带来了巨大的经济损失和数据安全风险。近期,一种名为“.mkp勒索病毒”的新型威胁开始在网络…

多线程引发的安全问题

前言👀~ 上一章我们介绍了线程的一些基础知识点,例如创建线程、查看线程、中断线程、等待线程等知识点,今天我们讲解多线程下引发的安全问题 线程安全(最复杂也最重要) 产生线程安全问题的原因 锁(重要…

在 Python 中创建列表时,应该写 `[]` 还是 `list()`?

在 Python 中,创建列表有两种写法: # 写法一:使用一对方括号 list_1 []# 写法二:调用 list() list_2 list() 那么哪种写法更好呢? 单从写法上来看,[] 要比 list() 简洁,那在性能和功能方面…

江科大笔记—读写内部闪存FLASH读取芯片ID

读写内部闪存FLASH 右下角是OLED,然后左上角在PB1和PB11两个引脚,插上两个按键用于控制。下一个代码读取芯片ID,这个也是接上一个OLED,能显示测试数据就可以了。 STM32-STLINK Utility 本节的代码调试,使用辅助软件…

[机缘参悟-200] - 对自然、人性、人生、人心、人际、企业、社会、宇宙全面系统的感悟 - 全图解

对自然、人性、人生、人心、人际、企业、社会、宇宙进行全面系统的感悟,是一个极其深邃且复杂的主题。以下是对这些领域的简要感悟: 自然: 自然是人类生存的根基,它充满了无尽的奥秘和美丽。自然界的平衡和循环规律,教…

运算符重载之日期类的实现

接上一篇文章&#xff0c;废话不多说&#xff0c;直接上代码 Date.h #pragma once #include<iostream> using namespace std; #include<assert.h>class Date {//友元函数声明friend ostream& operator<<(ostream& out, const Date& d);friend …

学编程容易遇到的误区,请提前规避

随着互联网行业的蓬勃发展和编程技术的普及&#xff0c;越来越多的人开始对编程感兴趣。然而&#xff0c;编程学习并非一蹴而就&#xff0c;新手入门时常常会陷入误区&#xff0c;影响学习状态效率。 今天&#xff0c;我们来一起揭开编程学习常见的五大误区&#xff0c;希望能…

Workbench密码登录登录失败

Workbench密码登录登录失败操作系统禁用了密码登录方式&#xff0c;会导致使用了正确的用户名和密码仍无法登录 sudo vim /etc/ssh/sshd_config 输入O进入编辑 改完后重启 systemctl restart sshd.service 登录报错 有试了几遍登上了 可能是改完还要等一会儿

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数&#xff1a; 函数二 函数三 主函数 运行结果 src&#xff1a; model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征&#xff0c;实现高准确度的身份识别。…

账做错了怎么办?看完这篇三分钟学会调错账|柯桥职业技能培训

作为会计遇到错账、漏账在所难免。既然错误在所难免&#xff0c;如果纠正错误就十分重要。今天就跟小编一起学下如何调账。 在处理错账之前&#xff0c;我们首先要把会计科目做一下分类&#xff0c;以便于我们找到错账的类型和原因。会计科目可以分为资产负债类科目&#x…

2.SQL注入-字符型

SQL注入-字符型(get) 输入kobe查询出现id和邮箱 猜测语句,字符在数据库中需要用到单引号或者双引号 select 字段1,字段2 from 表名 where usernamekobe;在数据库中查询对应的kobe&#xff0c;根据上图对应上。 select id,email from member where usernamekobe;编写payload语…

Emp.dll文件丢失?理解Emp.dll重要性与处理常见问题

在繁多的动态链接库&#xff08;DLL&#xff09;文件中&#xff0c;emp.dll 可能不是最广为人知的&#xff0c;但在特定软件或环境中&#xff0c;它扮演着关键角色。本文旨在深入探讨 emp.dll 的功能、重要性以及面对常见问题时的解决策略。 什么是 emp.dll&#xff1f; Emp.d…

【Java Gui精美界面】IDEA安装及配置SwingX

SwingX 是一个基于 Swing 的 Java GUI 库&#xff0c;旨在为 Swing 提供额外的功能和丰富的组件 特点描述基于 Swing继承了 Swing 的所有特性和功能。丰富组件SwingX 提供了一组高级 UI 组件&#xff0c;例如 TreeTable仍在发展中不活跃的发展ing。。。支持搜索高亮如 TreeTab…

【单元测试】Controller、Service、Repository 层的单元测试

Controller、Service、Repository 层的单元测试 1.Controller 层的单元测试1.1 创建一个用于测试的控制器1.2 编写测试 2.Service 层的单元测试2.1 创建一个实体类2.2 创建服务类2.3 编写测试 3.Repository 1.Controller 层的单元测试 下面通过实例演示如何在控制器中使用 Moc…

【漏洞复现】飞企互联——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据…

JAVA高级进阶13单元测试、反射、注解

第十三天、单元测试、反射、注解 单元测试 介绍 单元测试 就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其进行正确性测试 咱们之前是如何进行单元测试的&#xff1f; 有啥问题 &#xff1f; 只能在main方法编写测试代码&#xff0c;去调用其他方法进行测试。 …

Django 自定义过滤器

1&#xff0c;编写自定义过滤器并注册 创建目录 Test/app5/templatetags 分别创建文件 Test/app5/templatetags/__init__.py Test/app5/templatetags/myfilter.py 添加过滤器脚本 Test/app5/templatetags/myfilter.py from django import template register template.…