一文总结Redis知识点
目录
- 为什么基于MySQL又出现Redis?Redis的优点?
- Redis支持的基本命令
- Redis支持的数据结构
- 1 String
- 2 List
- 3 Set
- 4 Sorted Set
- 5 Hash
- 6 Stream 消息队列
- 7 Geospatial 地理空间
- 8 Bitmap 位图
- 9 Bitfield 位域
- 10 HyperLogLog
- Redis是单线程还是多线程?
- 发布订阅模式
- Redis中的事务与关系型数据库中的事务的区别?
- 持久化的两种方式RDB和AOF有什么区别?用哪个更好?
- RDB快照(Redis Database)
- AOF日志(Append-Only File)
- 主从复制
- Sentinel 哨兵模式
- Redis集群
- 集群中如何进行数据分区?
- 节点取余分区
- 一致性哈希分区
- 虚拟槽分区
- 集群的伸缩?
- 如何保证缓存数据和数据库数据的一致?
- 如何保证本地缓存和分布式缓存的一致?
- 如何处理热key和大key?
- Redis的管道?
为什么基于MySQL又出现Redis?Redis的优点?
-
MySQL是基于磁盘IO的,Redis是基于内存的。
内存的读写速度比磁盘IO的读写速度快很多,可以大大提高性能。 -
优点:基于内存所以性能高,支持的数据类型很丰富,支持所有主流的编程语言如python Java等,支持数据持久化(ROB AOF机制),支持主从复制,支持集群模式,支持哨兵模式。
-
Redis是key-value形式的非关系型数据库
Redis支持的基本命令
- SET 添加键值对
- GET 获取键值对
- EXISTS 查询键值对
- DEL 删除键值对
- FLUSHALL 删除所有键
- KEYS * 查询所有键
- TTL 查看键过期时间
- EXPIRE 设置键的过期时间
Redis支持的数据结构
1 String
- Redis默认用String进行存储
- String所有的命令都与基本命令一致
2 List
- 底层数据结构是双端队列
- 命令以L开头
- 独有命令:LPUSH(左边入队)LPOP(左边出队)LRANGE(从左边输出队列)LLEN(队列长度)LTRIM(从左边数保留队列的部分元素)RPUSH(右边入队)…
3 Set
- 无序去重集合
- 命令以S开头
- 独有命令:SADD(添加元素)SREM(删除元素)SISMEMBER(查询元素)
- 支持集合运算,交集并集等
4 Sorted Set
- 有序去重集合
- 命令以Z开头
- Zset中的每个元素都会关联一个浮点类型的分数,然后根据分数从小到大排序元素
- Zset中的元素是唯一的,但元素的分数可以是重复的
- 独有命令:ZRANGE key 0 -1 WITHSCORES(输出所有成员+分数)ZRANK(查看成员从小到大的排名)
5 Hash
- 命令以H开头
- Redis本身就是键值对,相当于键值对中的value又是键值对
6 Stream 消息队列
- 命令以X开头
- 独有命令:XREAD COUNT count BLOCK ms STREAMS key 0(从头一次从队列中读count条消息,如果没有消息就阻塞多少ms,可以重复读取。把0改成#可以读最新消息)XGROUP(创建消费者组和创建消费者)XINFO(查看消费者组的信息)
7 Geospatial 地理空间
- Redis3.2版本的新特性
- 一种专门用来存储地理位置信息的数据结构
- 命令以GEO开头
- 支持地理位置的计算操作
- 独有命令:GEOPOS(查找城市经纬度)DEODIST(计算城市直线距离)GEOSEARCH(查询以某城市为中心,在某范围内的城市)
8 Bitmap 位图
- 一个01数组,下标表示偏移量
- 命令以BIT开头
- 支持位运算
- 适用场景:记录用户签到情况,在线状态,是否点赞
9 Bitfield 位域
- 命令以BITFIELD开头
- 适用场景:记录游戏玩家信息
10 HyperLogLog
- 一种做基数统计的算法,即计算集合中的不重复元素个数
- 命令以PF开头
- 原理:随机算法
- 优点:占用内存小
- 缺点:有误差
- 适用场景:对精确度要求不高,但数据量很大的统计工作,如统计某词的搜索次数
Redis是单线程还是多线程?
- Redis一直倾向于使用单线程,避免了频繁的线程切换,是它的优点之一
- 4.0之前完全是单线程
- 4.0之后主线程是单线程,同时还有后台线程(处理脏数据、释放无用链接、删大key等)
- 6.0之后执行命令是单线程,同时还有其他线程(处理数据读写、解析协议)
发布订阅模式
- publish命令,将消息发送到指定频道
- subscribe命令,订阅指定频道
- 缺点:消息无法持久化,无法记录历史消息
Redis中的事务与关系型数据库中的事务的区别?
- 事务是一系列命令的集合,事务开启后,所有命令放到队列中,打包到一起发起执行事务的请求,可以在一次请求中执行多个命令
- MULTI命令开启事务
- EXEC命令执行事务
- 关系型事务为原子操作,所有命令要么全部执行成功,要么全部失败
- 非关系型事务不是原子操作,任何一个命令执行失败都不会妨碍下一个命令继续执行
持久化的两种方式RDB和AOF有什么区别?用哪个更好?
RDB快照(Redis Database)
- 每隔一个固定的时间间隔,将内存中的数据快照写入磁盘,即ROB保存的是某个时间点内数据的完整副本
- 优点:恢复速度快,适合备份
- 缺点:如果服务器突然宕机,最后一次快照之后的数据会丢失,做不到实时持久化
- 触发方式:1. 自动触发 2. save命令,在执行save命令期间,redis不能干其他事情 3. bgsave命令,创建一个子进程专门来拍快照,创建子进程期间redis不能干其他事情,但拍快照期间可以干其他
AOF日志(Append-Only File)
- 执行命令时一边将命令写到内存中,一边写到AOF中,Redis重启时利用AOF中的命令重建数据库,即AOF是一个保存着执行过的所有命令的日志
- 优点:做到了实时持久化
- 缺点:文件很大,恢复速度慢,启动效率低
各有优点,混合持久化最好,即ROB+增量AOF的形式,AOF文件只保存最后一次快照到此刻的执行命令,Redis重启时,先加载ROB文件,再重放增量AOF文件,即避免了ROB无法实时持久化,也避免了AOF文件过大。
主从复制
- 将一台redis主服务器的数据复制到其它redis从服务器
- 低级的redis集群模式
- 一个主节点可以有多个从节点,一个从节点只有一个主节点
- 数据单向复制,只能从主到从,主写从读
- 数据同步的方式可以全量复制,也可以部分复制
- 优点:数据热备份,故障恢复,负载均衡(读写分离可以分担服务器负载),高可用基石(哨兵模式和集群的基础)
- 缺点:主节点故障需人工干预(哨兵模式可解决),主节点的写能力受限制(分布式可解决)
Sentinel 哨兵模式
- 自动故障转移,主从复制过程中主节点故障无需人工干预
- 以独立进程的形式运行在redis集群中,监控服务器们运行,若发现某节点有问题,通过发布订阅模式通知其他节点,主节点故障会将一个从节点升级成新的主节点,再通知其他从节点更换了主节点。
- 主观下线和客观下线 主观下线就是哨兵节点认为某个节点有问题,客观下线就是超过一定数量的哨兵节点认为主节点有问题。
- 如何选新的主节点?拿到节点列表,先过滤不健康节点,再选择优先级最高的节点们,再选复制偏移量最大的节点们(说明数据最完整),再选runid最小的节点(说明启动最早)
- 哨兵节点是一个进程,也有可能故障,所以一般用3个哨兵,选举一个领导哨兵干活,领导挂了后重新选一个领导哨兵
Redis集群
- 数据分区/分片:集群最核心的功能。集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加;另一方面 每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
- 高可用: 集群支持主从复制和主节点的 自动故障转移 (与哨兵类似),当任一节点发生故障时,集群仍然可以对外提供服务。
集群中如何进行数据分区?
- 即拿到一个key(数据)应该把它放到集群中的哪个节点上?
- 数据分区是在创建集群的时候完成的
- 节点数量至少为6个才能保证组成完整高可用的集群
节点取余分区
- 对key或用户ID对hash值取余,来确定数据映射到哪一个节点上。
- 缺点:当节点数量变化时,如扩容或收缩节点,所有数据节点映射关系需要重新计算,会导致数据的重新迁移
一致性哈希分区
- 将整个 Hash 值空间组织成一个虚拟的圆环,然后对集群节点的 IP 地址或主机名做 Hash 取值后,放置在圆环上。当我们拿到一个key时,先对这个 key 做同样的Hash 取值,确定在环上的位置,然后按照顺时针方向在环上“行走”,遇到环上的第一个节点,将key放入。
- 优点:加入和删除节点只影响哈希环中相邻的节点,对其他节点无影响
- 缺点:当节点在圆环上分布不平均时,部分缓存节点的压力会较大。当某个节点故障时,这个节点承担的所有数据访问都会被顺移到下一个节点上,会对下一个节点造成压力。
虚拟槽分区
- Redis 集群使用的便是该方案
- 在一致性哈希分区的基础上,引入了虚拟节点,称为槽(slot)。在使用了槽的一致性哈希分区中,一个节点被分割成了多个槽,槽是数据管理和迁移的基本单位。
- 槽解耦了数据和实际节点之间的关系,增加或删除节点对系统的影响很小。当删除某个节点时,该节点下的多个槽可以带着数据较平均地分配到剩余的多个节点上,避免了该节点所有数据堆积到下一个节点上的问题。
集群的伸缩?
- 扩容:为新节点分配一定数量的槽和数据
- 缩容:将槽和数据分配给其他节点,再将要删除的节点下线
如何保证缓存数据和数据库数据的一致?
如何保证本地缓存和分布式缓存的一致?
如何处理热key和大key?
Redis的管道?
相关文章:
一文总结Redis知识点
目录 为什么基于MySQL又出现Redis?Redis的优点?Redis支持的基本命令Redis支持的数据结构1 String2 List3 Set4 Sorted Set5 Hash6 Stream 消息队列7 Geospatial 地理空间8 Bitmap 位图9 Bitfield 位域10 HyperLogLog Redis是单线程还是多线程?…...
ARM寄存器组
CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R0-R7,通用目的寄存器 R0-R7也被称为低组寄存器,所有指令可以访问它们,它们的字长为32位,复位后的初始值是不可预料的。 R8-R12,通用目的寄存器 R8-R12也被称…...
Windows查看当前文件夹下的所有.c文件的个数
在Windows的命令提示符(CMD)中,你可以使用for循环和dir命令结合起来,以计算当前文件夹下所有 .c 文件的个数。 下面是一个简单的示例,这个批处理脚本会计算当前目录下所有 .c 文件的个数: echo off setlo…...
ubuntu Qt 地图离线调用
ubuntu环境下在Qt上调用百度地图_ubuntu 百度地图_拿到金像奖上课那家店的博客-CSDN博客 【Qt初入江湖】Qt QtWebEngineWidgets 底层架构、原理详细描述_鱼弦的博客-CSDN博客 Ubuntu20.04 QT无法用Qwebengine控件的解决方案(临时)_cmsyq的博客-CSDN博客…...

Android Studio升级到Android API 33版本后,XML布局输入没有提示
低版本的Android Studio升级到Android API 33版本后,XML布局输入没有提示。查一下我目前使用的Android Studio 是2021年发布,而Android API 33是2022年发布的,这是由低版本升级到高版本造成不兼容的问题。解决方法有两种: 第一种…...
操作XML(带命名空间)
之前文章讲述了使用c# xpath如何操作xml文件,在实际开发项目中,遇到的很多xml文件都是带有命名空间的,如果还是用之前的代码获取,那将获取到null。 本文讲解操作代码有命名空间的Xml文件,以及多个命名空间的xml。 <…...

二叉搜索树(C++)
二叉搜索树 概念二叉搜索树的应用二叉搜索树的实现K模型基本结构和函数声明接口实现①find——查找关键码②Insert——插入关键码③Erase——删除关键码(重点)时间复杂度 源码(整体)非递归递归 KV模型 在使用C语言写数据结构阶段时…...
软件架构知识点
常用软件架构模型分类(5种) 软件架构建模方法(模型4种) 架构师分类(微软4种) 系统架构设计师的角色特质(6种) 计算机系统组成图谱 嵌入式操作系统的特点(5个&#x…...
C语言日常刷题6
文章目录 题目答案与解析1234567 题目 1、以下对C语言函数的有关描述中,正确的有【多选】( ) A: 在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体 B: 函数的实参和形参可以是相同的名字 C: 在main()中定…...

微信小程序使用stomp.js实现STOMP传输协议的实时聊天
简介: uniapp开发的小程序中使用 本来使用websocket,后端同事使用了stomp协议,导致前端也需要对应修改。 如何使用 在static/js中新建stomp.js和websocket.js,然后在需要使用的页面引入监听代码发送代码即可 代码如下&#x…...

基于饥饿游戏算法优化的BP神经网络(预测应用) - 附代码
基于饥饿游戏算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于饥饿游戏算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.饥饿游戏优化BP神经网络2.1 BP神经网络参数设置2.2 饥饿游戏算法应用 4.测试结果:5…...

[ 云计算 | AWS ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全指南
文章目录 一、前言二、所需 Maven 依赖三、先决必要的几个条件信息四、创建客户端连接五、Amazon S3 存储桶操作5.1. 创建桶5.2. 列出桶 六、Amazon S3 对象操作6.1. 上传对象6.2. 列出对象6.3. 下载对象6.4. 复制、重命名和移动对象6.5. 删除对象6.6. 删除多个对象 七、文末总…...
【Spring Boot】Spring Boot 配置 Hikari 数据库连接池
文章目录 前言配置 前言 数据库连接池是一个提高程序与数据库的连接的优化,连接池它主要作用是提高性能、节省资源、控制连接数、连接管理等操作; 程序中的线程池与之同理,都是为了优化、提高性能。 配置 spring:datasource:hikari:# 设置是…...

MR混合现实石油化工课堂情景实训教学演示
MR(混合现实)技术是一种结合了虚拟现实(VR)和增强现实(AR)优势的新型技术,在教育领域具有广阔的应用前景。在石油化工课堂中,MR混合现实情景实训教学的应用可以大大提高学生的学习效…...

php thinkphp 抖音支付,订单同步接口分享
1. 抖音支付 需要获取抖音小程序的AppID,AppSecret,需要配置回调地址,Token获取SALT 官方地址:支付,订单同步 以下干货仅针对于有一定开发基础的精英,0基础的止步。 public function DouyinPay($openId,$id,$body 抖音担保支付…...

excel功能区(ribbonx)编程笔记--2 button控件与checkbox控件
我们上一章简单先了解了ribbonx的基本内容,以及使用举例实现自己修改ribbox的内容,本章紧接上一章,先讲解一下ribbonx的button控件。 在功能区的按钮中,可以使用内置图像或提供自已的图像,可以指定大按钮或者更小的形式,添加少量的代码甚至可以同时提供标签。此外,可以利…...
JavaScript 知识点
立即执行函数 代码(function () {// ... })();创建函数的同时立即执行,没有绑定任何事件,也无需等待任何异步操作function () {} 是一个匿名函数,包围它的一对括号将其转换为一个表达式,紧跟其后的一对括号调用了这个函数。立即执…...

深入理解 JVM 之——动手编译 JDK
更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 本篇为深入理解 Java 虚拟机第一章的实战内容,推荐在学习前先掌握基础的 Linux 操作、编译原理基础以及扎实的 C/C 功底。 该系列的 GitHub 仓库:https://github.com/Doge2077/lear…...

[移动通讯]【Carrier Aggregation in LTE】【 Theory + Log analysis-1】
CA: Carrrier Aggregation PCC: Primary Component Carrier SCC: SCC Secondary Component Carrier 目录: 背景介绍 PCC & SCC 聚合方式 Precondition for CA 一 背景介绍 在没有CA 技术前,手机和基站以单子载波的方式,收发…...
Sui诚邀您参加KBW「首尔Web3之夜」
韩国区块链周(KBW)是由FACTBLOCK创办,Hashed联合主办的年度盛会。今年的KBW将于9月4–10日在韩国首尔举办。作为亚洲最具影响力的Web3行业盛会之一,KBW将汇聚业界优秀的参与者和先驱者,共同探讨区块链行业的未来。 Su…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...