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 协议 信息交换
    • 节点通信与故障检测
    • 主从复制
    • 数据迁移
    • 客户端路由

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

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

相关文章

Java 面试中的高频算法题详解

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

【Python项目】手写数字识别系统

【Python项目】手写数字识别系统 技术简介:采用Python技术、Django框架、MYSQL数据库等实现。 系统简介:手写数字识别系统主要的功能有手写字识别、手写字管理、修改密码、个人信息和用户管理。 背景: 在当今这个飞速发展的时代,…

Springboot + vue 小区物业管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

空指针:HttpSession异常,SpringBoot集成WebSocket

异常可能性: 404 : 请检查拦截器是否将请求拦截WebSocket握手期间HttpSession为空 HttpSession为空 方法一 : 网上参考大量的文档,有说跟前端请求域名有关系的。 反正对我来说,没啥用无法连接。 需使用 localhost&a…

什么是视频孪生智慧能源?视频孪生智慧能源的应用案例

‌视频孪生智慧能源是集三维地理信息系统、视频虚实融合、数字孪生、人工智能等多技术于一体的综合应用,旨在实现对能源系统的实时、动态、全方位监控和管理‌。 具体来说,视频孪生智慧能源通过以下方式实现其功能: ‌技术融合‌:…

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录前言 🍃一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…

006-excel数据输出insert语句

一、在空白列插入,选择需要的列 "INSERT INTO tab_name1 (code, name) VALUES ("&A1&", "&B1&");"二、 拖动填充块,或者双击填充块(可以快速填充整列) 三、直接把生成的 insert 语…

前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单

一、最早的灵感 最早的灵感来自sprider / 网络爬虫 / 爬虫配置,在爬虫爬取网站文章时候,会输入给爬虫一个配置文件,里边的内容是一个json对象。里边包含了所有想要抓取的页面的信息。爬虫通过这个配置就可以抓取目标网站的数据。其实本文要引…

43.Textbox的数据绑定 C#例子 WPF例子

固定最简步骤,包括 XAML: 题头里引入命名空间 标题下面引入类 box和block绑定属性 C#: 通知的类,及对应固定的任务 引入字段 引入属性 属性双触发,其中一个更新block的属性 block>指向box的属性 从Textbo…

excel按行检索(index+match)

假设你的数据表如下: 假设 数据区域是 A1:D4。 你想查询某人在某个日期的数据。 实现步骤 公式 在某个单元格中使用以下公式: excel 复制代码 INDEX(A2:D4, MATCH(“张三”, A2:A4, 0), MATCH(“2025/01/02”, A1:D1, 0)) 2. 公式拆解 MATCH(“张三”,…

信创改造-龙蜥操作系统搭载MySql、Tomcat等服务

龙蜥操作系统 Anolis OS 8 是 OpenAnolis 社区推出的完全开源、中立、开放的发行版,它支持多计算架构,也面向云端场景优化,兼容 CentOS 软件生态。Anolis OS 8 旨在为广大开发者和运维人员提供稳定、高性能、安全、可靠、开源的操作系统服务。…

FPGA EDA软件的位流验证

位流验证,对于芯片研发是一个非常重要的测试手段,对于纯软件开发人员,最难理解的就是位流验证。在FPGA芯片研发中,位流验证是在做什么,在哪些阶段需要做位流验证,如何做?都是问题。 我们先整体的…

【CI/CD构建】关于不小心将springMVC注解写在service层

背景 之前写一个接口的时候没有察觉到将RequestBody这个注解带到service层了。 今天提交代码的时候,插件没有检测到这个低级错误,导致试飞构建连maven编译都过不了,maven找不到程序包org.springframework.web.bind.annotation这个包 结果…

《深入理解Mybatis原理》Mybatis中的缓存实现原理

一级缓存实现 什么是一级缓存? 为什么使用一级缓存? 每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话。 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句&…

win32汇编环境,窗口程序中单选框的一般操作示例

;运行效果 ;win32汇编环境,窗口程序中单选框的一般操作示例 ;比如在窗口程序中生成单选框,默认哪项选中,判断当前选中哪一项,让哪项选中,得到选中项的名称等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>&g…

个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)

前言 最近开始准备秋招,打算做一个个人主页,以便在秋招市场上更有竞争力。 目前,现有的一些搭建主页的博文教程存在以下一些问题: 使用Github Page进行部署,这在国内访问容易受阻使用宝塔面板等框架,功能…

Spring MVC简单数据绑定

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》_springspringmvcmybatis从零开始 代码、课件、教学视频与相关软件包下载-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版&…

Mac上安装Label Studio

在Mac上安装Anaconda并随后安装Label Studio,可以按照以下步骤进行: 1. 在Mac上安装Anaconda 首先,你需要从Anaconda的官方网站下载适用于Mac的安装程序。访问Anaconda官网,点击“Download Anaconda”按钮,选择适合M…

vscode开启调试模式,结合Delve调试器调试golang项目详细步骤

1.前期准备 (1).在vs code中的扩展程序中搜索并安装Go扩展程序 (2).安装 Delve 调试器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打开vs code的命令面板,输入Go: Install/Update Tools,并单击该命令执行,安装或更新Go语…

SQL面试题1:连续登陆问题

引言 场景介绍: 许多互联网平台为了提高用户的参与度和忠诚度,会推出各种连续登录奖励机制。例如,游戏平台会给连续登录的玩家发放游戏道具、金币等奖励;学习类 APP 会为连续登录学习的用户提供积分,积分可兑换课程或…