当前位置: 首页 > news >正文

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

相关文章:

Redis 知识速览

文章目录 1. Redis 简介2. Redis 优缺点3. Redis 高性能4. Redis VM 机制5. Redis 数据类型6. 应用场景7. 持久化8. 过期策略9. 内存相关10. 线程模型11. 事务12. 集群 1. Redis 简介 定义:Redis 是一个用 C 语言编写的高性能非关系型(NoSQL&#xff09…...

LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105_中等_C++)(二叉树;递归)

LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105) 题目描述:输入输出样例:题解:解题思路:思路一(递归): 代码实现代码实现(思路一(递归…...

使用sqlplus的easy connect时如何指定是链接到shared server还是dedicated process

在oracle配置了shared server的情况下 可以使用 :shared来指定链接到shared server也可以默认不指定 不指定的情况下会默认链接到shared server 如果想链接到 dedicated process 则必须显式指定链接到dedicated process server type的类型包括DEDICATED, SHARED, or POOLED. […...

ubuntu22.4 ROS2 安装gazebo(环境变量配置)

ubuntu版本:ubuntu22.4 最近在学习ROS2 视频教程古月居的入门课: 视频教程 文字笔记 问题 在学到关于Gazebo的时候,遇到下面问题: 运行 $ ros2 launch gazebo_ros gazebo.launch.py在这里卡住,不弹出gazebo 解决…...

【机器学习:十四、TensorFlow与PyTorch的对比分析】

1. 发展背景与社区支持 1.1 TensorFlow的背景与发展 TensorFlow是Google于2015年发布的开源深度学习框架,基于其前身DistBelief系统。作为Google大规模深度学习研究成果的延续,TensorFlow从一开始就定位为生产级框架,强调跨平台部署能力和性…...

[C++]类与对象(上)

目录 💕1.C中结构体的优化 💕2.类的定义 💕3.类与结构体的不同点 💕4.访问限定符(public,private,protected) 💕5.类域 💕6.类的实例化 💕7.类的字节大小 💕8.类的字节大小特例…...

大数据技术实训:Zookeeper集群配置

一、本地模式安装部署 1)安装前准备 (1)安装jdk (2)拷贝Zookeeper安装包到Linux系统下 (3)解压到指定目录 tar -zxvf zookeeper-3.5.7.tar.gz -C /opt/module/ 2)配置修改 &am…...

HTML5 加载动画(Loading Animation)

加载动画(Loading Animation)详解 概述 加载动画是指在数据加载过程中,向用户展示的一种视觉效果,旨在提升用户体验,告知用户系统正在处理请求。它可以减少用户的等待焦虑感,提高界面的互动性。 常见的加…...

C语言进阶-2指针(一)

目录 1. 字符指针1.1 一般用法:字符指针指向单字符1.2 第二种用法,字符串首地址给指针变量1.3 习题,下面代码的输出结果是什么?为什么? 2. 指针数组2.1实例—— 字符指针数组2.2实例——整形指针数组2.3 例子,识别下下…...

【人工智能】用Python进行对象检测:从OpenCV到YOLO的全面指南

对象检测是计算机视觉领域的核心任务之一,广泛应用于视频监控、自动驾驶、智能安防等多个场景。随着深度学习技术的发展,基于传统方法的对象检测逐渐被基于神经网络的先进模型所取代。本文将系统地介绍如何使用Python进行对象检测,重点探讨了…...

《深度剖析算法优化:提升效率与精度的秘诀》

想象一下,你面前有一堆杂乱无章的数据,你需要从中找到特定的信息,或者按照一定的规则对这些数据进行排序。又或者,你要为一个物流公司规划最佳的配送路线,以降低成本和提高效率。这些问题看似复杂,但都可以…...

Mysql--重点篇--索引(索引分类,Hash和B-tree索引,聚簇和非聚簇索引,回表查询,覆盖索引,索引工作原理,索引失效,索引创建原则等)

索引是数据库中用于加速查询操作的重要机制。通过索引,MySQL可以快速定位到满足查询条件的数据行,而不需要扫描整个表。合理的索引设计可以显著提高查询性能,但不合理的索引可能会导致性能下降和磁盘空间浪费。因此,理解索引的工作…...

matlab使用 BP 神经网络进行数据预测的完整流程,包括数据读取、数据预处理等等

%% 初始化程序 warning off % 关闭报警信息 close all % 关闭所有图窗 clear % 清空变量 clc % 清空命令行 setdemorandstream(172) %设置随机种子为1%% 读取数据 data xlsread(Y.xlsx); %% 划分训练集…...

systemd-networkd NetworkManager 介绍

systemd-networkd 和 NetworkManager 的详细介绍 systemd-networkd 和 NetworkManager 都是 Linux 系统中常用的网络管理工具,但它们的设计目标和使用场景不同。以下是它们的详细介绍、功能、使用场景和差异。 1. systemd-networkd systemd-networkd 是一个由 syst…...

本地部署项目管理工具 Leantime 并实现外部访问

Leantime 是一款开源 AI 项目。它可以在本地直接运行大语言模型 LLM、生成图像、音频等。直接降低了用户使用AI的门褴。本文将详细的介绍如何利用 Docker 在本地部署 Leantime 并结合路由侠实现外网访问本地部署的 Leantime 。 第一步,本地部署安装 Leantime 1&am…...

PHP cURL 函数初学者完全指南

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...

C#中的Array数组,List集合和ArrayList集合--07

目录 一.Array数组概念的简单理解 1.数组的初始化 2.数组的长度 3.数组的克隆和复制 4.数组的清空 5.数组的查找 6.数组的逆转 7.数组的拓展和缩减 8.数组的比较 9.数组的合并 10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等 二.Array数组进阶 1.二…...

基于深度学习的视觉检测小项目(十三) 资源文件的生成和调用

在使用 PySide6 进行开发时,管理应用程序的资源(如图标、图片、字体、样式表、音视频等)是一个常见的任务。PySide6 提供了一个工具 pyside6-rcc,它能够将资源文件(.qrc)编译成 Python 模块,然后…...

硬件实用技巧:TPS54331DR横杠标识识别1引脚

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/145116969 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

《C++11》nullptr介绍:从NULL说起

在C11之前,我们通常使用NULL来表示空指针。然而,NULL在C中有一些问题和限制,这就是C11引入nullptr的原因。本文将详细介绍nullptr的定义、用法和优点。 1. NULL的问题 在C中,NULL实际上是一个整数0,而不是一个真正的…...

vue组件的data为什么是函数?

vue组件的data为什么是函数? 在JS中,实例是通过构造函数创建的,每个构造函数可以new出多个实例,每个实例都会继承原型上的方法和属性。 在vue中,一个vue组件就是一个实例,当一个组件被复用多次&#xff0…...

Vue在线预览excel、word、ppt等格式数据。

目录 前言 1.安装库 2.预览文件子组件代码 3、新建store/system.ts 4、父页面进行使用 总结 前言 纯前端处理文件预览,包含excel、word、ppt、txt等格式,不需要后端服务器进行部署,并且内网也可以使用。 1.安装库 npm install vue-offi…...

win中将pdf转为图片

0 资料 博客 1 正文 直接使用这个软件即可https://sourceforge.net/projects/pkpdfconverter/...

2025五大免费变声器推荐!

在游戏开黑时想靠声音搞怪活跃气氛,或是在直播中用独特声线吸引观众,又或者给视频配音时想尝试不同角色 —— 但市面上的变声软件要么收费高昂,要么效果生硬、操作复杂,难道找到一款好用又免费的变声器真的这么难? 今…...

2025年,百度智能云打响AI落地升维战

如果说从AI到Agent是对于产品落地形态的共识,那么如今百度智能云打响的恰是一个基于Agent进行TO B行业表达的AI生产力升维战。 在这个新的工程体系能力里,除了之前百度Create大会上提出的面向Agent的RAG能力等通用能力模块,对更为专业、个性…...

Webhook 配置备忘

本文地址:blog.lucien.ink/archives/552 将下列代码保存为 install.sh,然后 bash install.sh。 #!/usr/bin/env bash set -e wget https://github.mirrors.lucien.ink/https://github.com/adnanh/webhook/releases/download/2.8.2/webhook-linux-amd64.…...

单片机0-10V电压输出电路分享

一、原理图 二、芯片介绍 GP8101是一个PWM信号转模拟信号转换器,相当于一个PWM信号输入,模拟信号输出的DAC。此 芯片可以将占空比为0%到100%的PWM信号线性转换成0-5V或者0-10V的模拟电压,并且输出电压 精度小于1%。GP8101M可以处理高频调制的…...

【Python 算法零基础 4.排序 ⑨ 堆排序】

目录 一、问题描述 二、算法对比 1.朴素算法 ① 数组模拟容器 ② 有序数组模拟容器 2.二叉堆 ① 二叉堆特点 ② 数组表示二叉树 ③ 堆 ④ 大顶堆 ⑤ 小顶堆 ⑥ 元素插入 ⑦ 获取堆顶 ⑧ 堆顶元素删除 三、代码分析 1.工具函数 2.调整大顶堆函数 Ⅰ、计算子节点索引 Ⅱ、找出最…...

使用 DuckLake 和 DuckDB 构建 S3 数据湖实战指南

本文介绍了由 DuckDB 和 DuckLake 组成的轻量级数据湖方案,旨在解决传统数据湖(如HadoopHive)元数据管理复杂、查询性能低及厂商锁定等问题。该方案为中小规模数据湖场景提供了简单、高性能且无厂商锁定的替代选择。 1. 什么是 DuckLake 和 D…...

Kafka 核心架构与消息模型深度解析(二)

案例实战:Kafka 在实际场景中的应用 (一)案例背景与需求介绍 假设我们正在为一个大型电商平台构建数据处理系统。该电商平台拥有庞大的用户群体,每天会产生海量的订单数据、用户行为数据(如浏览、点击、收藏等&#…...