Update Redis.md

虚拟内存特性已在 2.6 移除;淘汰策略补全为 8 种;哈希字段可用 HEXPIRE 设置过期(7.4);区分事务与流水线;分布式锁改为 SET NX PX 并链接分布式笔记;数据类型补充 Stream 等;slaveof 改为 REPLICAOF。
This commit is contained in:
CyC2018
2026-10-23 11:18:54 +08:00
parent 53b3aa7fb2
commit 55d0cff73b
+9 -7
View File
@@ -51,7 +51,7 @@
Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。
键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
键的类型只能为字符串,值支持五种基本数据类型:字符串、列表、集合、散列表、有序集合,此外还有位图、HyperLogLog、地理空间、流(Stream)等类型。
Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。
@@ -365,7 +365,7 @@ List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息
在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。
可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。
可以使用 SET 命令的 NX 和 PX 选项实现单实例的分布式锁,除此之外,还可以使用官方提出的 RedLock 算法在多个独立实例上实现分布式锁,详见 [分布式](分布式.md)。
### 其它
@@ -393,7 +393,7 @@ Redis Cluster 实现了分布式的支持。
### 内存管理机制
- 在 Redis 中,并不是所有数据都一直存储在内存中,可以将一些很久没用的 value 交换到磁盘,而 Memcached 的数据则会一直在内存中。
- Redis 和 Memcached 的数据都一直存储在内存中。Redis 曾经支持把很久没用的 value 交换到磁盘(虚拟内存),但是该特性已经在 2.6 版本移除。
- Memcached 将内存分割成特定长度的块来存储数据,以完全解决内存碎片的问题。但是这种方式会使得内存的利用率不高,例如块的大小为 128 bytes,只存储 100 bytes 的数据,那么剩下的 28 bytes 就浪费掉了。
@@ -401,13 +401,13 @@ Redis Cluster 实现了分布式的支持。
Redis 可以为每个键设置过期时间。过期的键不会在过期的瞬间被删除,而是通过两种策略清除:惰性删除,在访问键时检查它是否过期,过期就删除;定期删除,后台定时随机抽取一部分设置了过期时间的键进行检查,删除其中已经过期的键。
对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不能为键里面的单个元素设置过期时间。
对于散列表这种容器,Redis 7.4 之前只能为整个键设置过期时间,7.4 开始可以使用 HEXPIRE 等命令为单个字段设置过期时间。
## 七、数据淘汰策略
可以设置内存最大使用量,当内存使用量超出时,会施行数据淘汰策略。
Redis 具体有 6 种淘汰策略:
Redis 4.0 之后具体有 8 种淘汰策略:
| 策略 | 描述 |
| :--: | :--: |
@@ -416,6 +416,8 @@ Redis 具体有 6 种淘汰策略:
|volatile-random | 从已设置过期时间的数据集中任意选择数据淘汰 |
| allkeys-lru | 从所有数据集中挑选最近最少使用的数据淘汰 |
| allkeys-random | 从所有数据集中任意选择数据进行淘汰 |
| volatile-lfu | 从已设置过期时间的数据集中挑选最不经常使用的数据淘汰 |
| allkeys-lfu | 从所有数据集中挑选最不经常使用的数据淘汰 |
| noeviction | 禁止驱逐数据 |
作为内存数据库,出于对性能和内存消耗的考虑,Redis 的淘汰算法实际实现上并非针对所有 key,而是抽样一小部分并且从中选出被淘汰的 key。
@@ -460,7 +462,7 @@ Redis 是内存型数据库,为了保证数据在断电后不会丢失,需
一个事务包含了多个命令,服务器在执行事务期间,不会改去执行其它客户端的命令请求。
事务中的多个命令被一次性发送给服务器,而不是一条一条发送,这种方式被称为流水线,它可以减少客户端与服务器之间的网络通信次数从而提升性能。
事务中的命令会先被服务器放入队列,EXEC 时依次执行。流水线(Pipelining)是另一个概念,指客户端不等待响应就连续发送多条命令,从而减少网络往返次数,事务通常和流水线一起使用。
Redis 最简单的事务实现方式是使用 MULTI 和 EXEC 命令将事务操作包围起来。
@@ -531,7 +533,7 @@ def main():
## 十一、复制
通过使用 slaveof host port 命令来让一个服务器成为另一个服务器的从服务器。
通过使用 REPLICAOF host port 命令来让一个服务器成为另一个服务器的从服务器(5.0 之前为 SLAVEOF,现已弃用)。
一个从服务器只能有一个主服务器,并且不支持主主复制。