Redis 知识速览

文章目录

    • 1. Redis 简介
    • 2. Redis 优缺点
    • 3. Redis 高性能
    • 4. Redis VM 机制
    • 5. Redis 数据类型
    • 6. 应用场景
    • 7. 持久化
    • 8. 过期策略
    • 9. 内存相关
    • 10. 线程模型
    • 11. 事务
    • 12. 集群

1. Redis 简介

  • 定义:Redis 是一个用 C 语言编写的高性能非关系型(NoSQL)键值对数据库。
  • 数据类型:键的类型只能为字符串,值支持五种数据类型:字符串(String)、列表(List)、集合(Set)、散列表(Hash)、有序集合(Zset)。
  • 存储方式:数据存在内存中,读写速度快。
  • 应用场景:缓存、分布式锁、事务处理、持久化、LUA脚本执行、LRU驱动事件、多种集群方案。

2. Redis 优缺点

  • 优点
    • 读写快:基于内存操作和底层线程模型。
    • 数据持久化:支持 AOF 和 RDB 持久化机制。
    • 事务支持:Redis 操作是原子性的,支持合并后的原子性执行。
    • 丰富的数据结构:除了字符串外还支持 hash、set、zset、list 等。
    • 主从复制:主机会自动将数据同步到从机,可以实现读写分离。
    • 多种集群模式。
  • 缺点
    • 容量限制:数据库容量受物理内存限制。
    • 主从复制局限:不具备自动容错和恢复功能,主机宕机可能导致数据不一致问题。
  • 常见问题
    • 缓存击穿 -> 热点key过期,高并发请求打到数据库 -> 设置合理的缓存失效时间
    • 缓存穿透 -> 访问不存在的key,恶意攻击数据库 -> 针对接口限流、针对用户限流、使用布隆过滤器(Bloom Filter)防止穿透
    • 缓存雪崩 -> 大量key集中失效,大量请求打到数据库 -> 数据预热、分布式部署缓存服务器

3. Redis 高性能

  • 基于内存操作,类似 HashMap 的查找效率。
  • 数据结构简单,专为高效操作设计。
  • 单线程模型,避免上下文切换和竞争条件。
  • 使用多路 I/O 复用模型,非阻塞 IO。
  • 自构建 VM 机制,优化内存使用。

4. Redis VM 机制

  • 开启 VM 功能可实现冷热数据分离,提高访问速度。
  • 自行管理交换文件,减少IO操作,提高效率。

5. Redis 数据类型

  • String:支持字符串、整数或浮点数的操作。
    • SDS 柔性数组对象(不限长度的char[]),记录了已用字符串len,未用字符串free,不需要读结尾 \0
  • List:双向链表,支持两端压入弹出元素。
    • quickList、zipList(数组)/listPack(链表)
  • Set:无序集合,支持交集、并集等操作。
    • intset(value 为整数类型,元素少于 set-max-intset-entries 配置值时使用此结构) / dict
  • Zset:有序集合,支持排序操作。
    • skipList(跳表)
  • Hash:包含键值对的无序散列表。
    • listPack / dict -> Hashtable 扩容和渐进式 Rehash (在rehash过程中,同时使用原哈希表和新哈希表来进行键值对的查找和插入操作, 实现平滑的哈希表扩容,保证并发访问,避免 rehash 过程出现大量的哈希冲突)

6. 应用场景

  • 计数器:利用 String 类型进行自增自减操作。
  • 缓存:热点数据缓存,提高读取速度。
  • 会话缓存:统一存储多台服务器会话信息。
  • 全页缓存 (FPC):用于快速加载浏览过的页面。
  • 查找表:如 DNS 记录。
  • 消息队列:使用 List 实现简单的消息队列。
  • 分布式锁:使用 SETNX 命令实现。
  • 其他应用:如排行榜、共同好友等功能。

7. 持久化

  • RDB:定期快照保存,性能高但安全性较低。(BGSAVE)
  • AOF:记录每次写命令,数据安全但文件较大。

总结:通常同时使用两种机制,优先加载 AOF 文件恢复数据。

8. 过期策略

  • 定时过期:立即清除过期数据,占用 CPU 资源。
  • 惰性过期:访问时检查是否过期,节省 CPU 资源。
  • 定期过期:定期扫描并清除 expires 字典中一定数量的过期数据,平衡 CPU 和内存资源。

9. 内存相关

  • 淘汰策略:筛选范围分为全局的和设置过期时间的键空间选择性移除;常用算法有:当内存不足时移除最近最少使用的 key (LRU 算法)或随机移除 key (Random 算法),还有 LFU 算法和 TTL 算法。
  • 内存优化:使用集合类型(hash,set,zset,list)数据存储,减少内存占用。

10. 线程模型

  • 单 Reactor 多线程模型:基于 Reactor 模式实现了核心组件 - 文件事件处理器:使用 I/O 多路复用监听多个套接字, 并发送产生事件的套接字给文件事件分派器(单线程),分派器根据套接字执行的任务类型调用不同的事件处理器。
  • 事件循环(Event Loop):基于事件驱动的异步非阻塞的网络通信模型,它通过监听和处理事件来实现网络通信和其他任务的处理, I/O 多路复用 是事件循环机制用于检测文件描述符活动状态的一种技术实现。

11. 事务

  • 概念:通过 MULTI、EXEC、WATCH 等命令实现,保证一次性、顺序性、排他性地执行一系列命令。
  • 特性:支持原子性和隔离性,但不支持回滚。
  • Lua 脚本:保证脚本内命令的一次性执行,同样不提供回滚。

12. 集群

  • 主从复制
    • 读写分离
      1. 全量复制 - RDB;
      1. 基于长连接的命令传播;
      1. 增量复制 - repl_backlog_buffer环形缓冲区 + master_repl_offset / slave_repl_offset
  • Sentinel 哨兵模式
    • 实时监控 & 故障转移 (定期PING -> 主观下线 -> 客观下线 -> 故障转移,注意不是领导者下线而是主节点下线)
    • Sentinel 领导者选举 - Raft 一致性算法(候选者状态 -> 提名和投票 -> 选举过程[等待赞成票] -> 防止分裂 -> 领导者维持)
  • Cluster 模式
    • 三种分片方案(客户端分片、代理层分片以及 Redis Cluster - 解决横向扩展问题)
    • Redis Cluster 方案:一致性哈希 分片,Gossip 协议 信息交换
    • 节点通信与故障检测
    • 主从复制
    • 数据迁移
    • 客户端路由

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

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

相关文章

YangQG 面试题汇总

一、交叉链表 问题: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 解题思想: 双指针 备注:不是快慢指针,如果两个长度相…

fastapi 使用

参考: https://fastapi.tiangolo.com/zh/tutorial/first-steps/https://fastapi.tiangolo.com/zh/tutorial/first-steps/ FastAPI 用于基于标准 Python 类型提示使用 Python 构建 API,使用 ASGI 的标准来构建 Python Web 框架和服务器。所有简单理解&a…

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看

泛目录和泛站有什么差别

啥是 SEO 泛目录? 咱先来说说 SEO 泛目录是啥。想象一下,你有一个巨大的图书馆,里面的书架上摆满了各种各样的书,每一本书都代表着一个网页。而 SEO 泛目录呢,就像是一个超级图书管理员,它的任务就是把这些…

k8s基础(6)—Kubernetes-存储

Kubernetes-存储概述 k8s的持久券简介 Kubernetes的持久卷(PersistentVolume, PV)和持久卷声明(PersistentVolumeClaim, PVC)为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储,PVC是对这部分存储的请求。…

深度学习-卷积神经网络反向传播梯度公式推导

这篇文章非常棒,单样本单通道的反向传播梯度公式推导我都理解了。为了防止找不到原网页,所以特复制于此 参考: https://zhuanlan.zhihu.com/p/640697443

论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)

Diffusion policy: Visuomotor policy learning via action diffusion(下) 文章概括5. 评估5.1 模拟环境和数据集5.2 评估方法论5.3 关键发现5.4 消融研究 6 真实世界评估6.1 真实世界Push-T任务6.2 杯子翻转任务6.3 酱汁倒入和涂抹任务 7. 实际双臂任务…

C#学习笔记 --- 简单应用

1.operator 运算符重载:使自定义类可以当做操作数一样进行使用。规则自己定。 2.partial 分部类: 同名方法写在不同位置,可以当成一个类使用。 3.索引器:使自定义类可以像数组一样通过索引值 访问到对应的数据。 4.params 数…

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…

【2024年华为OD机试】 (CD卷,100分)- 最大N个数与最小N个数的和(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。 说明: 数组中数字范围 [0, 1000]最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回 -1输入非法返回 -1 …

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换,后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件: ToolboxCreator.exe/ini:toolboxcreator…

cursor+deepseek构建自己的AI编程助手

文章目录 准备工作在Cursor中添加deepseek 准备工作 下载安装Cursor (默认安装在C盘) 注册deepseek获取API key 在Cursor中添加deepseek 1、打开cursor,选择设置 选择Model,添加deepseek-chat 注意这里去掉其他的勾选项&…

《零基础Go语言算法实战》【题目 2-7】defer 关键字特性

《零基础Go语言算法实战》 【题目 2-7】defer 关键字特性 下面代码的输出是什么?请说明原因。 package main import ( "fmt" ) func main() { deferFunc() func deferFunc() { defer func() { fmt.Println("value1") }() defer func() {…

如何规模化实现完全自动驾驶?Mobileye提出解题“新”思路

在CES 2025上,Mobileye展示了端到端自动驾驶系统Mobileye Drive™,通过高度集成的传感器、算法和计算平台,可以实现自动驾驶功能的全覆盖。 Mobileye创始人兼首席执行官Amnon Shashua教授 期间,Mobileye创始人兼首席执行官Amnon …

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛,旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程,体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

超大规模分类(三):KNN softmax

传统的分类损失计算输入数据和每个类别中心的距离,来优化模型的训练。KNN softmax通过选择和输入数据最相关的top-K个类别,仅计算输入数据和top-K个类别中心的距离,以减小计算量。 KNN softmax首次诞生于达摩院机器智能技术实验室发表的SIGKD…

MySQL素材怎么导入Navicat???

不管用什么方法都要先关掉MySQL服务,并且提前备份数据! 1.有sql文件时候。 打开navicat,运行sql文件 然后点击后面三个点,选中要运行的sql文件,开始。 鼠标右键刷新一下,就能看到sql文件中的表了 2.没有s…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统,可以通过以下几种方法尝试分析: 查看页面源代码: 打开网站,右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志,例如: WordPress 的迹象&#xff1a…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务,存储非结构化数据,兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言:AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中,企业对于智能化应用的需求日益增长。然而,传统的数据应用开发方式面临着诸多挑战,如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…