Redis 的使⽤和原理
第一章:初识 Redis
1.1盛赞 Redis
1.2 Redis 特性
1. 速度快
2. 基于键值对的数据结构服务器
3. 丰富的功能
4. 简单稳定
5. 客⼾端语⾔多
6. 持久化(Persistence)
7. 主从复制(Replication)
8. ⾼可⽤(High Availability)和分布式(Distributed)
1.3 Redis 使⽤场景
1.3.1 Redis 可以做什么
1. 缓存(Cache)
2. 排⾏榜系统
3. 计数器应⽤
4. 社交⽹络
5. 消息队列系统
1.3.2 Redis 不可以做什么
第⼆章 Redis 常⻅数据类型
2.1.1 基本全局命令
KEYS

EXISTS
DEL
EXPIRE
TTL
TYPE
2.1.2 数据结构和内部编码
2.1.3 单线程架构
1. 引出单线程模型
redis单线程,只有一个线程去接收处理所有的请求,并不是服务器进程内部只有一个线程,其实也有很多线程,这些线程都在处理网络IO

上面这个情况,可能会有线程安全问题

其实redis服务器并不会有这种情况,因为redis服务器是单线程服务器,把接收到的请求串行执行,多个请求到达redis队列中,也是需要进行排队等候的.
redis能够使用单线程模型,很好的工作,是因为redis处理的业务逻辑是短平快,不消耗CPU资源,如果一个操作执行的时间太长,就会影响其他的请求的执行
2.为什么redis是单线程,速度还能这么快,效率这么高?
他的速度快和效率高是与关系性数据库(MySQL,Orcale)进行对比
1.redis直接访问的是内存,而关系性数据库访问的硬盘
2.redis的核心功能,比关系性数据库的核心功能要简单,数据库对于数据的插入查询,都有更复杂的功能支持,
3.单线程模型,减少了不必要的线程竞争开销,redis每个操作都是短平快,不涉及特别消耗cpu的操作
4.处理网络IO的时候,使用了epoll这样的IO多路复用机制,IO多路复用机制,一个线程就可以处理多个socket,,epoll事件通知/回调机制,一个线程可以完成好多任务,前提是这些任务的交互不频繁,大部分时间都在等,可以采取epoll多路复用机制

1.String 字符串
在redis中,所以的key都是string类型,value的数据类型才有差异

常见命令
SET

GET
MGET
MSET
SETNX
计数命令
INCR
INCRBY
DECR
DECYBY
INCRBYFLOAT
APPEND
GETRANGE
SETRANGE
STRLEN
命令⼩结
内部编码



典型使⽤场景
缓存(Cache)功能


举一个例子来理解一下缓存
这是一段伪代码
redis这样的缓存,经常存储"热点"数据(被高频使用的数据),最近一段时间都会反复用到的数据,

计数(Counter)功能
共享会话(Session)
⼿机验证码
2.Hash 哈希
常见命令
1.HSET
2.HGET
3.HEXISTS
4.HDEL
5.HKEYS
6.HGETALL
7.HMGET
8.HLEN
9.HSETNX
10.HINCRBY
命令⼩结
内部编码
ziplist(压缩列表):
hashtable(哈希表):
1)当 field 个数⽐较少且没有⼤的 value 时,内部编码为 ziplist:
2)当有 value ⼤于 64 字节时,内部编码会转换为 hashtable:
3)当 field 个数超过 512 时,内部编码也会转换为 hashtable:
使⽤场景
注意
缓存⽅式对⽐
1. 原⽣字符串类型
2. 序列化字符串类型,例如 JSON 格式
3. 哈希类型
关于内聚和耦合
高内聚:有关联的代码紧密联系在一起

低耦合:代码的各个模块之间影响不大

3.List列表
列表类型的特点:
第⼀:
第⼆
第三
常见命令
LPUSH(头插)
LPUSHX
RPUSH(尾插)
RPUSHX
LRANGE
LPOP(头删)
RPOP(尾删)
LINDEX
LINSERT
LLEN
LREM
指定元素精准删除

1.当count>0时,从头开始删除指定元素的次数

2.当count<0时,从尾开始删除指定元素的次数

3.当count=0时,删除全部指定的元素

LTRIM
只保留范围内的元素


LSET
根据下标修改元素


阻塞版本命令
BLPOP
BRPOP
内部编码
ziplist(压缩列表):
linkedlist(链表):
quicklist
每个节点都是一个压缩列表,以链表的形式连接起来
使⽤场景
作为数组

消息队列
微博 Timeline
4.set集合
基本命令
SADD
SMEMBERS
SISMEMBER
SCARD
SPOP
SMOVE
SREM
集合间操作
SINTER
SINTERSTORE
SUNION
SUNIONSTORE
SDIFF
SDIFFSTORE
命令小结

内部编码
intset(整数集合):
hashtable(哈希表):
使⽤场景
1.使用set来保存用户的标签
2.使用set来计算共同好友,基于集合求交集
Zset 有序集合
常见命令
zadd
ZCARD
ZCOUNT
ZRANGE
ZREVRANGE
ZRANGEBYSCORE
ZPOPMAX
BZPOPMAX
ZPOPMIN
BZPOPMIN
ZRANK
ZREVRANK
ZSCORE
ZREM
ZREMRANGEBYRANK
ZREMRANGEBYSCORE
ZINCRBY
集合间操作

ZINTERSTORE(交集)

ZUNIONSTORE并集

命令⼩结


内部编码
ziplist(压缩列表):
当有序集合的元素个数⼩于 zset-max-ziplist-entries 配置(默认 128 个), 同时每个元素的值都⼩于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会⽤ ziplist 来作
skiplist(跳表):
使⽤场景
相关文章:
Redis 的使⽤和原理
第一章:初识 Redis 1.1盛赞 Redis Redis 是⼀种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis 中的值可以是由 string(字符串)、hash(哈希)、list&…...
前端学Java
一:语法 1、注解 注解(Annotation)是Java中的一种特殊类型的语法,它可以被用来为代码提供元数据。元数据是关于数据的数据,注解可以用于类、方法、变量等的描述与标记。 理解注解可以从以下几个方面入手:…...
VR游戏:多人社交将是VR的下一个风口
第一部分:创业笔记 1. 市场趋势 从单机游戏转向多人互动体验:随着技术的进步,VR游戏正从单机模式向多人互动体验转变。代表作品如Rec Room、Phasmophobia、Among Us和Breachers等,这些游戏的成功证明了多人互动模式的巨大潜力。…...
Docker与虚拟机(VM)的不同
Docker与虚拟机(VM)在实现的原理上存在显著的不同,主要体现在以下几个方面: 一、基础原理 Docker 利用Linux内核的特性,如容器(containers)、命名空间(namespaces)和控制…...
Pr 视频效果:透视
效果面板/视频效果/透视 Video Effects/Perspective Adobe Premiere Pro 的视频效果中,透视 Perspective效果组主要用于在二维平面的视频剪辑中模拟三维空间的透视效果。 通过调整这些效果,可以改变图像的视角、添加阴影、创造立体感,增强画面…...
C 语言标准库 - <limit.h>
简介 <limits.h> 是 C 标准库中的一个头文件,定义了各种数据类型的限制。这些宏提供了有关整数类型(char、short、int、long 和 long long 等)和其他数据类型的最大值和最小值的信息。 这些限制指定了变量不能存储任何超出这些限制的…...
Python | Leetcode Python题解之第519题随机翻转矩阵
题目: 题解: class Solution:def __init__(self, m: int, n: int):self.m mself.n nself.total m * nself.map {}def flip(self) -> List[int]:x random.randint(0, self.total - 1)self.total - 1# 查找位置 x 对应的映射idx self.map.get(x,…...
大数据新视界 -- 大数据大厂之提升 Impala 查询效率:索引优化的秘籍大揭秘(上)(3/30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
【AI工作流】FastGPT - 深入解析FastGPT工作流编排:从基础到高级应用的全面指南
文章目录 一、工作流编排概述二、FastGPT的节点类型1. 基础功能插件(1) 文本输出(2) 功能调用(3) 工具(4) 外部调用(5) 其他 2. 系统插件3. 团队插件 三、工作流中的流向结语 在当今快速发展的人工智能领域,工作流编排的能力已成为提升用户体验和应用效率的关键因素…...
VS+Qt解决提升控件后,包含头文件格式不对问题处理
一、前言 VSQt 提升控件后,在uic目录下会生成ui相关的初始化文件,对于提升的控件头文件包含的格式为#include<> 而非 #include “ ” 导致无法找到头文件。如果手动修改为 #include “ ”相当麻烦,甚至每次编译都要修改一遍,…...
opencv - py_imgproc - py_filtering filtering 过滤-卷积平滑
文章目录 平滑图像目标2D 卷积(图像过滤)图像模糊(图像平滑)1. 平均2. 高斯模糊3. 中值模糊4. 双边滤波 其他资源 平滑图像 目标 学习: 使用各种低通滤波器模糊图像将定制滤波器应用于图像(2D 卷积&…...
精华帖分享|缠论系列 -笔
本文来源于量化小论坛策略分享会板块精华帖,作者为吴奕萱,发布于2023年6月4日。 以下为精华帖正文: 01 笔 昨天讲了3根K线组合关系的完全分类,按照逻辑,其实我们会考虑是不是应该讲4根、5根K线的组合关系了。 精华帖…...
Java项目实战II基于Spring Boot的文理医院预约挂号系统的设计与实现(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在医疗资源日益紧张的背景下࿰…...
NumPy Ndarray学习
1.NumPy Ndarray 对象简介 NumPy 最重要的特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都有相同存储大小的区域。 2.N…...
Browserslist 配置
Browserslist 是一个工具和规范,用于定义和共享支持的浏览器列表,以便在前端开发中管理不同工具的兼容性。这些工具可以包括 Babel、Autoprefixer、ESLint 等,它们都可以使用 Browserslist 提供的配置来确定应支持哪些浏览器及其版本。 主要…...
vue2中的v-bind相当于原生js的什么
在 Vue 2 中,v-bind 是一个指令,用于动态地将一个或多个属性绑定到 DOM 元素上。它相当于在原生 JavaScript 中直接操作 DOM 元素属性的方法。 v-bind 的基本用法 在 Vue 中,v-bind 可以这样使用: <!-- 绑定一个属性 -->…...
c语言-scanf函数的用法
文章目录 一、scanf是什么?二、通过scanf进行赋值scanf 输入一段带空格的句子, %[^\n] 格式字符串。 三、赋值忽略符 一、scanf是什么? 函数原型:int scanf ( const char * format, … ); scanf是一个格式输出库函数,…...
AI带货主播插件开发之商品推荐模块!
AI带货主播,作为新兴的人工智能技术应用领域,正逐渐改变着电商直播的格局,在这一领域,商品推荐模块是提升用户体验、增加销售额的关键一环。 本文将探讨AI带货主播插件的商品推荐模块开发,并分享五段关键的源代码&…...
使用Nginx作为反向代理和负载均衡器
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Nginx作为反向代理和负载均衡器 引言 Nginx 简介 安装 Nginx Ubuntu CentOS 配置 Nginx 作为反向代理 配置 Nginx 作为负载…...
【数据结构二叉树】C非递归算法实现二叉树的先序、中序、后序遍历
引言: 遍历二叉树:指按某条搜索路径巡访二叉树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。 除了层次遍历外,二叉树有三个重要的遍历方法:先序遍历、中序遍历、后序遍历。 1、递归算法实现先序、中序、后…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
