Redis--6379
Redis--6379
Redis基本介绍
- Redis的默认端口为6379
- 列表和有序集合中索引从
0开始,负数表示从尾部开始(例如-1表示最后一个元素)。 - Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,广泛应用于缓存、消息队列、会话存储等场景。
- 主要特点
- 高性能:基于内存操作,读写速度极快。
- 持久化:支持RDB和AOF两种持久化方式,确保数据安全。
- 丰富的数据结构:支持字符串、哈希、列表、集合、有序集合等。
- 原子操作:所有操作都是原子的,支持事务。
- 原子操作指的是一个操作在执行过程中不会被其他操作打断,要么全部执行成功,要么全部不执行。
- 高可用:通过主从复制和哨兵机制实现高可用。
- 分布式:支持集群模式,数据分片存储。
- 数据结构
- 字符串(String):最基本的数据类型,可以存储文本或二进制数据。
- 哈希(Hash):键值对集合,适合存储对象。
- 列表(List):有序的字符串列表,支持双向操作。
- 集合(Set):无序且唯一的字符串集合。
- 有序集合(Sorted Set):有序且唯一的字符串集合,每个元素关联一个分数。
- 持久化
- RDB(Redis Database):定期生成数据快照,适合备份和恢复。
- AOF(Append-Only File):记录所有写操作,适合数据持久化。
- 事务
- Redis支持简单的事务,通过
MULTI、EXEC、DISCARD和WATCH命令实现。事务中的命令会按顺序执行,但不支持回滚。
- Redis支持简单的事务,通过
- 高可用与分布式
- 主从复制:主节点负责写操作,从节点负责读操作,数据从主节点同步到从节点。
- 哨兵(Sentinel):监控主从节点,自动进行故障转移。
- 集群(Cluster):数据分片存储,支持水平扩展。
- 高可用与分布式
- 主从复制:主节点负责写操作,从节点负责读操作,数据从主节点同步到从节点。
- 哨兵(Sentinel):监控主从节点,自动进行故障转移。
- 集群(Cluster):数据分片存储,支持水平扩展。
安装Redis
-
使用Docker安装Redis
-
官方的镜像文件中是没有Redis配置文件的,可以指定映射的配置文件
-
docker run -itd --name redis-master -p 6379:6379 -v /F/Docker/mapping/redis/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf -
挂载到该容器内的某一个位置并使用该配置文件启动redis容器
-
-
容器内启动多个Redis
-
redis-server redis-6380.conf
-
大小写敏感性
| 特性 | 说明 |
|---|---|
| 键的大小写敏感性 | Redis 的键是大小写敏感的,mykey 和 MyKey 是两个不同的键。 |
| 命令的大小写 | Redis 的命令不区分大小写,GET 和 get 是等价的。 |
| 命名规范 | 建议统一命名规范,避免因大小写问题导致键冲突或混淆。 |
Redis 键和值的类型
-
键的类型
- 键始终是字符串类型:无论值是什么数据类型,键本身都是一个字符串。
- 二进制安全:Redis 的键和值是二进制安全的,这意味着键和值可以包含任何二进制数据,而不仅仅是文本数据(如 JPEG 图片、序列化对象等)。
-
值的类型
- Redis 支持以下数据类型作为值:
- 字符串(String):最基本的数据类型,可以存储文本、数字或二进制数据。
- 列表(List):一个有序的字符串列表,支持在头部或尾部插入和删除元素。
- 哈希(Hash):一个键值对集合,适合存储对象。
- 集合(Set):一个无序的字符串集合,元素唯一,不支持重复。
- 有序集合(Sorted Set):类似于集合,但每个元素关联一个分数(score),用于排序。
- Redis 支持以下数据类型作为值:
-
可以使用
TYPE命令查看键对应的值的类型。-
TYPE key
-
-
中文显示问题
-
Redis 的键和值都是二进制安全的,可以存储任意二进制数据,包括中文字符。
-
Redis 不会对存储的数据进行编码或解码,数据以原始的字节形式存储。
-
Redis 存储的数据通常是
UTF-8编码。- 如果存储一个字符串
"你好",Redis 会直接存储其字节表示(如 UTF-8 编码的字节序列),而不会关心这些字节代表什么内容。 - 例如,当使用
SET mykey "你好"命令时,Redis 会存储"你好"的UTF-8编码字节序列。
- 如果存储一个字符串
-
假设存储一个中文字符串
"你好":-
SET mykey "你好" -
Redis 会直接存储
"你好"的UTF-8编码字节序列(如\xE4\xBD\xA0\xE5\xA5\xBD)。 -
Redis 不会关心这些字节的含义,只是将其作为二进制数据存储。
-
-
当读取
mykey时:-
GET mykey -
Redis 会返回存储的字节序列(如
\xE4\xBD\xA0\xE5\xA5\xBD)。 -
如果知道这些字节是
UTF-8编码的文本,可以将其解码为字符串"你好"。
-
-
Redis中通用命令
-
KEYS:查找匹配的键-
查找数据库中所有匹配指定模式的键。
-
KEYS pattern #返回所有以 user 开头的键。 KEYS user* -
KEYS命令会遍历整个数据库,如果键的数量非常多,可能会导致性能问题。 -
在生产环境中,建议使用
SCAN命令代替KEYS。
-
-
SCAN:增量式遍历键-
作用:增量式地遍历数据库中的键,避免阻塞 Redis 服务。
-
SCAN cursor [MATCH pattern] [COUNT count] SCAN 0 MATCH user* COUNT 10 #每次返回最多 10 个匹配 user* 的键。
-
-
EXISTS:检查键是否存在-
检查一个或多个键是否存在。
-
EXISTS key [key ...] #返回 1 表示键存在,0 表示键不存在。多个值则返回存在键的个数
-
-
DEL:删除键-
DEL key [key ...] #返回被删除键的数量。
-
-
RENAME:重命名键-
RENAME key newkey
-
-
EXPIRE:设置键的过期时间-
为键设置过期时间(以秒为单位)。
-
EXPIRE key seconds
-
-
TTL:查看键的剩余过期时间-
作用:查看键的剩余过期时间(以秒为单位)。
-
TTL key-2:键不存在。-1:键存在,但没有设置过期时间。- 正整数:键的剩余过期时间。
-
-
TYPE:查看键对应的值的数据类型-
TYPE keystring:字符串类型。list:列表类型。set:集合类型。zset:有序集合类型。hash:哈希类型。
-
数据库管理命令:
-
SELECT:选择数据库-
切换到指定的数据库。
-
SELECT index
-
-
FLUSHDB:清空当前数据库-
清空当前数据库中的所有键。
-
FLUSHDB
-
-
FLUSHALL:清空所有数据库-
清空所有数据库中的所有键。
-
FLUSHALL
-
Redis索引规则
-
Redis 列表的索引从
0开始。 -
负数索引表示从列表末尾开始计算,例如
-1表示最后一个元素,-2表示倒数第二个元素,依此类推。 -
start大于stop-
LTRIM mylist 3 1 #清空 LRANGE mylist 3 1 #empty array -
LTRIM会清空列表
-
LRANGE显示为空(没有数据)
-
-
start或stop超出范围- 如果
start或stop超出列表的索引范围,Redis 会自动将其调整为列表的有效范围。
- 如果
Redis值的类型数据
字符串String
-
字符串是 Redis 最基本的数据类型,可以存储文本、数字或二进制数据。
-
设置指定键的值。
SET-
SET key value [EX seconds] [PX milliseconds] [NX|XX]key: 键名。value: 键值。EX seconds: 设置键的过期时间(秒)。PX milliseconds: 设置键的过期时间(毫秒)。NX: 仅当键不存在时设置。XX: 仅当键存在时设置。
-
SET mykey "Hello Redis" SET mykey "Hello Redis" EX 60 # 设置键值并设置 60 秒过期时间 SET mykey "Hello Redis" NX # 仅当 mykey 不存在时设置 -
如果键已经存在,
SET会直接覆盖旧值,无论旧值是什么类型。 -
如果键之前设置了过期时间,
SET会清除过期时间,除非显式地通过EX或PX选项重新设置。
-
-
获取指定键的值。
GET- 获取指定键的值。
GET key - 设置键的值并返回旧值。
GETSET key value - 获取多个键的值。
MGET key1 key2 key3 ...
- 获取指定键的值。
-
修改字符串
- 将值追加到指定键的末尾。
APPEND key value - 将键对应的值加 1(值必须是整数)。
INCR key - 将键的值增加指定的整数。
INCRBY key increment - 将键对应的值减 1(值必须是整数)。
DECR key - 将键的值减少指定的整数。
DECRBY key decrement
- 将值追加到指定键的末尾。
-
查询字符串
- 获取键的值的长度。
STRLEN key - 获取所有的值
Keys *
- 获取键的值的长度。
列表List
基本介绍:
- Redis 中的 列表(List) 是一种有序的、可重复的数据结构,基于双向链表实现。列表允许在头部或尾部高效地插入和删除元素,适合实现栈、队列等数据结构。
- 特性
- 有序性:列表中的元素按照插入顺序排列。
- 可重复性:列表中的元素可以重复。
- 高效操作:
- 在头部或尾部插入、删除元素的时间复杂度为 O(1)。
- 通过索引访问元素的时间复杂度为 O(n)。
常用命令:
-
插入元素
-
在头部插入元素(LPUSH)
-
LPUSH key value [value ...]- 将一个或多个元素插入到列表的头部。
-
在尾部插入元素(RPUSH)
-
RPUSH key value [value ...]
-
-
删除元素
-
从头部删除元素(LPOP)
-
LPOP key -
移除并返回列表的第一个元素。
-
-
从尾部删除元素(RPOP)
-
-
获取元素
-
获取列表长度(LLEN)
-
LLEN key -
返回列表的长度。
-
-
获取指定范围的元素(LRANGE)
-
LRANGE key start stop -
返回列表中指定范围的元素(闭区间)。
-
-
通过索引获取元素(LINDEX)
-
LINDEX key index -
返回列表中指定索引位置的元素。
-
-
-
修改元素
-
设置指定索引位置的元素(LSET)
-
LSET key index value -
将列表中指定索引位置的元素设置为新值。
-
-
-
其他操作
-
修剪列表(LTRIM)
-
LTRIM key start stop -
只保留列表中指定范围的元素,其余元素删除。
-
-
插入元素(LINSERT)
-
LINSERT key BEFORE|AFTER pivot value -
在列表中某个元素的前面或后面插入新元素。
-
-
集合Set
基本介绍:
- Redis 中的 集合(Set) 是一种无序的、唯一的数据结构,适合存储不重复的元素。集合支持高效的添加、删除和查找操作,常用于去重、交集、并集等场景。
- 集合的特性
- 无序性:集合中的元素没有顺序。
- 唯一性:集合中的元素不允许重复。
- 高效操作:
- 添加、删除、查找元素的时间复杂度为 O(1)。
- 计算交集、并集、差集的时间复杂度与集合大小相关。
常用命令:
-
添加元素
-
添加一个或多个元素(SADD)
-
SADD key member [member ...] -
将一个或多个元素添加到集合中。返回值为成功添加的元素个数,重复值不会添加
-
-
删除元素
-
删除一个或多个元素(SREM)
-
SREM key member [member ...] -
从集合中删除一个或多个元素。返回值为成功删除的元素个数
-
-
获取元素
-
获取集合中的所有元素(SMEMBERS)
-
SMEMBERS key -
返回集合中的所有元素。
-
随机获取一个元素(SRANDMEMBER)
-
SRANDMEMBER key [count] -
随机返回集合中的一个或多个元素。
-
-
检查元素是否存在
-
检查元素是否在集合中(SISMEMBER)
-
SISMEMBER key member -
返回
1表示存在,0表示不存在。
-
-
集合运算
-
求多个集合的交集(SINTER)
-
SINTER key [key ...] -
返回多个集合的交集。
-
-
求多个集合的并集(SUNION)
-
SUNION key [key ...] -
返回多个集合的并集。
-
-
求多个集合的差集(SDIFF)
-
SDIFF key [key ...] -
返回多个集合的差集(第一个集合有而其他集合没有的元素)。
-
-
-
其他操作
-
获取集合的大小(SCARD)
-
SCARD key -
返回集合中元素的数量。
-
-
有序集合(Sorted Set)
基本介绍:
- Redis 中的 有序集合(Sorted Set) 是一种有序的、唯一的数据结构,每个元素都关联一个分数(score),用于排序。有序集合结合了集合和有序列表的特性,适合存储需要排序的数据。
- 有序集合的特性
- 有序性:元素按照分数(score)排序。
- 唯一性:元素不允许重复,但分数可以重复。
- 高效操作:
- 添加、删除、查找元素的时间复杂度为 O(log N)。
- 支持范围查询、排名查询等操作。
常用命令:
-
添加元素
-
添加一个或多个元素(ZADD)
-
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] -
将一个或多个元素添加到有序集合中。
-
可选参数:
NX:仅当元素不存在时添加。XX:仅当元素存在时更新。CH:返回被修改的元素数量。INCR:将元素的分数增加指定值。
-
-
-
删除元素
-
删除一个或多个元素(ZREM)
-
ZREM key member [member ...] -
从有序集合中删除一个或多个元素。
-
-
删除分数范围内的元素(ZREMRANGEBYSCORE)
-
ZREMRANGEBYSCORE key min max -
删除分数在
min和max之间的元素。
-
-
删除排名范围内的元素(ZREMRANGEBYRANK)
-
ZREMRANGEBYRANK key start stop -
删除排名在
start和stop之间的元素(排名从 0 开始)。
-
-
-
获取元素
-
获取集合中的所有元素(ZRANGE)
-
ZRANGE key start stop [WITHSCORES] -
返回有序集合中指定排名范围的元素(按分数升序排列)。
-
WITHSCORES:同时返回元素的分数。
-
-
获取集合中的所有元素(按分数降序排列,ZREVRANGE)
-
ZREVRANGE key start stop [WITHSCORES] -
返回有序集合中指定排名范围的元素(按分数降序排列)。
-
-
获取分数范围内的元素(ZRANGEBYSCORE)
-
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] -
返回分数在
min和max之间的元素。
-
-
-
检查元素
-
获取元素的分数(ZSCORE)
-
ZSCORE key member -
返回指定元素的分数。
-
-
获取元素的排名(ZRANK/ZREVRANK)
-
ZRANK key member ZREVRANK key member -
ZRANK:返回元素的排名(按分数升序排列,从 0 开始)。 -
ZREVRANK:返回元素的排名(按分数降序排列,从 0 开始)。
-
-
-
集合运算
-
求多个有序集合的交集(ZINTERSTORE)
-
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] -
计算多个有序集合的交集,并将结果存储到
destination中。 -
可选参数:
WEIGHTS:为每个集合的分数设置权重。AGGREGATE:指定交集分数的聚合方式(SUM、MIN、MAX)。
-
-
求多个有序集合的并集(ZUNIONSTORE)
-
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] -
计算多个有序集合的并集,并将结果存储到
destination中。
-
-
-
其他操作
-
获取集合的大小(ZCARD)
-
ZCARD key -
返回有序集合中元素的数量。
-
-
获取分数范围内的元素数量(ZCOUNT)
-
ZCOUNT key min max -
返回分数在
min和max之间的元素数量。
-
-
哈希Hash
基本介绍
- Redis 中的 哈希(Hash) 是一种键值对集合,适合存储对象或结构化数据。哈希的键和值都是字符串类型,常用于存储对象的属性和值。
- 哈希的特性
- 结构化数据:哈希适合存储对象或结构化数据,例如用户信息、商品信息等。
- 高效操作:
- 添加、删除、查找单个字段的时间复杂度为 O(1)。
- 获取所有字段或值的时间复杂度为 O(N),其中 N 是字段数量。
常用命令
-
添加字段
-
设置单个字段的值(HSET)
-
HSET key field value -
设置哈希中指定字段的值。
-
-
设置多个字段的值(HMSET)
-
HMSET key field value [field value ...] -
设置哈希中多个字段的值。
-
-
-
获取字段的值
-
获取单个字段的值(HGET)
-
HGET key field -
返回哈希中指定字段的值。
-
-
获取多个字段的值(HMGET)
-
HMGET key field [field ...]
-
-
获取所有字段和值(HGETALL)
-
HGETALL key
-
-
-
删除字段
-
删除一个或多个字段(HDEL)
-
HDEL key field [field ...] -
删除哈希中一个或多个字段。
-
-
-
检查字段
-
检查字段是否存在(HEXISTS)
-
HEXISTS key field -
检查哈希中是否存在指定字段。
-
返回
1表示存在,0表示不存在。
-
-
-
获取字段信息
-
获取所有字段(HKEYS)
-
HKEYS key -
返回哈希中所有字段。
-
-
获取所有值(HVALS)
-
HVALS key -
返回哈希中所有值。
-
-
获取字段数量(HLEN)
-
HLEN key -
返回哈希中字段的数量。
-
-
-
其他操作
-
增加字段的值(HINCRBY)
-
HINCRBY key field increment -
将哈希中指定字段的值增加
increment。 -
如果字段不存在,则会先将其值初始化为
0,然后再执行增量操作。 -
如果字段的值不是整数,则会返回错误。
-
-

浙公网安备 33010602011771号