redis7知识点总结

news2024/11/28 6:54:27

文章目录

  • 1. redis单线程为啥会这么快
  • 2. redis数据类型和底层存储结构
    • 2.1 string类型
      • 2.1.1 SDS
    • 2.2 hash类型
    • 2.3 list类型
    • 2.4 set类型(集合)
    • 2.5 zset类型(有序集合)
    • 2.6 ziplist压缩列表
    • 2.7 listpack
    • 2.8 quicklist-快速列表
    • 2.9 skiplist 跳表
  • 3. redis高可用方案(集群策略)
  • 4. redis淘汰key算法
  • 5. redis过期key删除策略
  • 6. redis分布式锁
  • 7. redis数据持久化
  • 8. redis如何配置key的过期时间,实现原理
  • 9. redis主从复制原理
  • 10. redis高并发问题
  • 11. 热点数据缓存重建问题

1. redis单线程为啥会这么快

  1. 基于内存操作,一条命令几十纳秒
  2. 单线程,减少线程切换
  3. 使用io多路复用技术
  4. 使用高效的数据存储结构,链表和数组

2. redis数据类型和底层存储结构

参考: Redis的五种数据结构的底层实现原理

type数据类型,对应的是value五种数据类型。
字符串:REDIS_STRING;
哈希:REDIS_HASH;
列表:REDIS_LIST;
集合:REDIS_SET;
有序集合:REDIS_ZSET
encoding类型如下图
在这里插入图片描述
String类型的编码方式,即encoding有三种:int、embstr、raw。
value的值是整数,encoding为int,没有对应底层数据结构;
value长度小于32,encoding为embstr,长度大于,32编码为raw,embstr和raw都使用SDS数据结构存储。

2.1 string类型

By default, a single Redis string can be a maximum of 512 MB.

2.1.1 SDS

参考: Redis 源码解读——sds
在这里插入图片描述
sds优势

  1. 提升性能,sds直接使用len字段获取长度,时间复杂度是o(1), c语言中获取字符串长度是遍历,直到遇到‘\0’,时间复杂度是o(n)
  2. 保证二进制安全,sds遇到‘\0’不会结束,c语言字符串遇到‘\0’结束
  3. 减少内存再分配次数, sds修改字符串不一定会重新分配内存,采用的是空间与分配和惰性空间释放策略来避免内存再分配,len小于1M,会分配2len(str)的空间,修改时,空间够则不进行分配,不够则再分配2len(总str), 修改后字符串长度大于1M,则再分配1m的未使用空间, 当c语言修改字符串,会进行内存再分配策略
    参考: redis字符串实现,空间与分配,sds和c区别
  4. 兼容c函数, 用于字符串比较,strcmp(sds_str->buf, buf),buf属性为一个字符数组,,最后一个保存空字符’\0’,空字符不算进len中
  5. 杜绝缓冲区溢出
    在这里插入图片描述
    参考:理解Redis设计与实现(一):简单动态字符串(SDS)

2.2 hash类型

listpack 和hash表

2.3 list类型

在这里插入图片描述
quicklist

2.4 set类型(集合)

intset和哈希表
参考: Redis之intset(整数集合)

2.5 zset类型(有序集合)

listpack和skiplist

2.6 ziplist压缩列表

是经过特殊编码的可以存储字符串或整数的双向链表
参考 : Redis Ziplist(压缩列表)
在这里插入图片描述

  • zlbytes:记录整个ziplist的大小。
  • zltail:ziplist开始指针与最后一个entry之间的偏移量,通过该偏移量可以获得最后一个entry。
  • zllen:entry数量。
  • entry:存储具体数据的节点。
  • zlend:ziplist结尾标识。
    ziplist会导致级联更新,降低性能

2.7 listpack

与ziplist类似
在这里插入图片描述

2.8 quicklist-快速列表

在这里插入图片描述

  • -2 表示zlbytes 最大8k
    在这里插入图片描述
typedef struct quicklist {
    quicklistNode *head;
    quicklistNode *tail;
    unsigned long count;        /* total count of all entries in all listpacks */
    unsigned long len;          /* number of quicklistNodes */
    signed int fill : QL_FILL_BITS;       /* fill factor for individual nodes */
    unsigned int compress : QL_COMP_BITS; /* depth of end nodes not to compress;0=off */
    unsigned int bookmark_count: QL_BM_BITS;
    quicklistBookmark bookmarks[];
} quicklist;
  1. 检索(遍历 zlen 的和 与index比较)
  2. 插入数据, 先检索,再插入,插入数据时需要判断插入数据的大小
    在这里插入图片描述
  3. 删除元素
    如果删除后ziplist 没有元素,则需要吧该ziplist也从链表中移除

2.9 skiplist 跳表

在这里插入图片描述
在这里插入图片描述

优点:查询快
缺点:节点增或删除之后需要更新层级结构,采用随机化的层级结构解决此问题

参考:Redis源码解析:数据结构详解-skiplist

3. redis高可用方案(集群策略)

  1. 主从集群-1主多从
  2. 主从+哨兵
  3. 多主多从模式

参考:4 种 Redis 集群方案介绍 + 优缺点对比

4. redis淘汰key算法

LRU(least recently used) 和LFU(least frequently used)

5. redis过期key删除策略

惰性过期-只有访问到了才回去检查是否过期,过期则删掉
定期过期- 隔一定时间扫描一定数量的key,删除过期的

6. redis分布式锁

  • 一文搞定Redis分布式锁的实现和原理
  • Redis实现分布式锁的7种方案,及正确使用姿势!
  • Redis实现分布式锁

7. redis数据持久化

rdb和aof

  • Redis 数据持久化
  • redis7.0.5数据持久化(RDB和AOF)
  • 深度好文:Redis持久化
  • redis的两种持久化方式

8. redis如何配置key的过期时间,实现原理

expire
setex
惰性过期-只有访问到了才回去检查是否过期,过期则删掉
定期过期- 隔一定时间扫描一定数量的key,删除过期的, 平衡执行频率和执行时长,会遍历每个database(默认16个), 检查当前数据库中执行的key(默认20个), 随机抽查key, 过期就删除

9. redis主从复制原理

  • Redis主从复制
  • Redis 主从复制1

10. redis高并发问题

redis高并发问题以及解决方案

11. 热点数据缓存重建问题

双重检测锁
分布式锁(针对不同的key设置不同的锁)

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

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

相关文章

马士兵-郑金维—并发编程—6.并发集合

一、ConcurrentHashMap 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CAS+synchronized实现的线程安全 CAS:在没有hash冲突时(Node要放在数组上时) synchronized:在出现hash冲突时(Node存放的位置已经有数据了) 存储的结构:…

DBCO-PEG3-NHS ester,2163772-16-3,二苯并环辛炔-三聚乙二醇-琥珀酰亚胺酯

英文名称:DBCO-PEG3-NHS ester 中文名称:二苯并环辛炔-三聚乙二醇-琥珀酰亚胺酯 CAS:2163772-16-3 分子式:C32H35N3O9 分子量:605.64 纯度:>95% 外观:浅黄色半固态 储存条件&#xff…

互联网企业的逆向奔赴,京东调集首批1000余名快递小哥陆续抵达北京

在每一次苦难来临的时刻,逆行者的背影,总是让人倍感温暖。   在疫情依然肆虐的当下,更是如此。   那些义无反顾地奔赴疫情最前线的逆行者们,总是在用血肉之躯守护着我们的生活冷暖。如果一定要寻找这些逆行者当中最美的那一抹…

SDK JDBC多种方式接入AZURE SQL DATABASE JAVA版

本文阐述使用JDBC接入AZURE SQL 数据库 笔者认为AZURE云上的AZURE SQL和SQL SERVER是很相似的,在普通的账号密码情况下JDBC字符串都是一致的。 下来全部说明官方的多种连接方式,参考官方: https://learn.microsoft.com/zh-cn/sql/connect/jdb…

Post-GWAS: single-cell disease relevance score (scDRS) 分析

1、scDRS的计算原理如下所示: 图片来源:Zhang M J, Hou K, Dey K K, et al. Polygenic enrichment distinguishes disease associations of individual cells in single-cell RNA-seq data[R]. Nature Publishing Group, 2022. 2、通过scDRS分析可以得到…

XDisplay 安装教程

Splashtop Wired XDisplay 安装教程1. 概述2. Splashtop XDisplay 详细安装教程2.1 下载 Splashtop XDisplay2.2 电脑上安装 Splashtop XDisplay2.3 iPad安装 Splashtop XDisplay3. 遇到的问题3.1 下载 iTunes3.2 安装 iTunes3.3 打开 iTunes3.4 同意许可协议4. iPad连接Window…

学会用这个键,Word做得比领导还整齐, 早早下班不是梦

大家比较常用到哪些快捷键呢?快捷键用得熟练,工作效率可是会大大提高的。下面介绍4类常用的Word快捷键,希望能够帮到你,大家一起提高效率,早早下班!一、字体样式:平常更改字体样式,总…

【openEuler系列】部署文件共享服务Samba

个人名片: 对人间的热爱与歌颂,可抵岁月冗长🌞 Github👨🏻‍💻:念舒_C.ying CSDN主页✏️:念舒_C.ying 个人博客🌏 :念舒_C.ying 1 配置环境 挂载系统ISO&am…

李沐精读论文:GAN

论文:https://papers.nips.cc/paper/2014/file/5ca3e9b122f61f8f06494c97b1afccf3-Paper.pdf 视频:GAN论文逐段精读【论文精读】_哔哩哔哩_bilibili 课程:CS231n 2022PPT笔记- 生成模型Generative Modeling ​李宏毅机器学习——对抗生成网络…

基本算法学习记录---Day2

并查集模板1 class Solution {int[] root new int[200000];public int Que() {//初始化for(int i 1;i<n;i){root[i] i;}//TODO}//找根(将节点连接)public int find(int x){if(root[x] ! x){root[x] find(root[x]);}return root[x];}//合并public void heb(int i,int j)…

快速突出重点数据,条件样式来帮你

使用条件样式可以实现使用样式标注符合规则的数据&#xff0c;可以帮助直观查看数据、发现关键数据问题和数据的变化趋势。例如&#xff1a; 使用红色文字标注同比增幅小于10%的省份 使用红色文字标注同比增幅小于10%的省份使用不同的图标标注计划完成情况&#xff0c;绿色图…

PS CS6视频剪辑基本技巧(一)CS6可以实现的视频剪辑功能

前几天儿子要做一个居家生活的视频在班会上分享&#xff0c;想把视频做得漂亮一些&#xff0c;不想应付了事&#xff0c;本人略懂PS&#xff0c;所以就地取材学了一下用PS CS6制作视频&#xff0c;现在把学习到的基本技巧给大家分享一下。本人非专业人士&#xff0c;所用软件也…

Arthas入门和安装使用

闲聊 我前几天也阳了&#xff0c;难受的要死&#xff0c; 不过今天明显好转&#xff0c;抓紧来一篇博文助助兴。如果对你有一点收获&#xff0c;辛苦点个赞。 简介 Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持JDK6以上。主要用于定位和诊断线上程序运行问…

Solidity之abi.encode各编码方法使用

什么是智能合约 ABI ABI Specification for encoding and decoding 非常精炼的一句话&#xff1a;一套用来编码和解码的规范。 注意与合约字节码&#xff08;bytecode&#xff09;要区分开&#xff0c;字节码只是一串用十六进制数表示的 EVM 操作码。 在 Solidity 文档中描…

文件内容的读写 (IO) —— 数据流

文件内容的读写 IO —— 数据流一、什么是数据流二、字节流输入InputStream2.1 InputStream 概述2.2 FileInputStream 的使用三、字节流输出OutputStream3.1 OutputStream 概述3.2 FileOutputStream 的使用四、字符流输入 Reader4.1 Reader 与 FileReader4.2 利用 Scanner 进行…

[Java]图论进阶--最小生成树算法

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1. 最小生成树 1.1 Kruskal(克鲁斯卡尔) 算法 …

计算机毕设Python+Vue校园社团信息管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Teams app LukcyDraw 的升级之路

我已经有很长一段时间没有更新我的 Teams App&#xff1a;LuckyDraw 了&#xff0c;有很多用户反馈给我&#xff0c;因为快到圣诞&#xff0c;新年和春节了&#xff0c;很多公司都开始要使用LuckyDraw来搞抽奖活动&#xff0c;希望LuckyDraw能支持大用户量的抽奖&#xff0c;所…

当打造一款极速湖分析产品时,我们在想些什么

作者&#xff1a;王有卓&#xff0c;StarRocks Contributor 随着开源数据湖技术的快速发展以及湖仓一体全新架构的提出&#xff0c;传统数据湖在事务处理、流式计算以及数据科学场景的限制逐渐得以优化解决。 为了满足用户对数据湖探索分析的需求&#xff0c;StarRocks 在 2.…

jsp+ssm计算机毕业设计ssm实验教学资源管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…