目录
一、概述
二、数据类型
三、String
四、Hash
五、List
六、Set
七、Sorted Set
八、通用命令
一、概述
 Redis 是一个开源的、高性能的 键值对 数据库,支持多种数据类型,提供丰富的操作命令,常用于缓存、消息队列、排行榜等场景。了解 Redis 的数据类型及其对应的操作命令,有助于充分发挥 Redis 的性能优势,构建高效的应用程序。
 本文将记录一些常用的 Redis 数据结构以及命令,便于之后使用时进行查询。
二、数据类型
Redis 提供了以下五种基本数据类型:
- 字符串(String)
- 哈希(Hash)
- 列表(List)
- 集合(Set)
- 有序集合(Sorted Set)
此外,Redis 还提供了以下特殊数据类型:
- 位图(Bitmap)
- HyperLogLog
- 地理位置(Geo)
- 流(Stream)
- JSON(通过 RedisJSON 模块)
三、String
1. 简介
- 类型描述:字符串是 Redis 中最基本的数据类型,一个键对应一个值,值可以是字符串、数字、二进制数据等。
- 应用场景:缓存对象、计数器、字符串操作等。
2. 常用命令
设置与获取值
-  SET key value [EX seconds] [PX milliseconds] [NX|XX]:设置指定键的值。示例: SET mykey "Hello, Redis!" SET mykey "Hello, Redis!" EX 60 # 设置过期时间为60秒 SET mykey "Hello, Redis!" NX # 仅当键不存在时设置
-  GET key:获取指定键的值。示例: GET mykey
批量操作
-  MSET key1 value1 key2 value2 ...:同时设置多个键的值。示例: MSET key1 "value1" key2 "value2"
-  MGET key1 key2 ...:同时获取多个键的值。示例: MGET key1 key2
计数器操作
-  INCR key:将键的值加 1。示例: INCR counter # 如果键不存在,初始值为0,再加1
-  DECR key:将键的值减 1。示例: DECR counter
-  INCRBY key increment:将键的值增加指定的整数。示例: INCRBY counter 5
-  DECRBY key decrement:将键的值减少指定的整数。示例: DECRBY counter 3
字符串操作
-  APPEND key value:将指定的值追加到键的值末尾。示例: APPEND mykey " World!"
-  STRLEN key:获取键值的字符串长度。示例: STRLEN mykey
四、Hash
1. 简介
- 类型描述:哈希是一个键值对集合,适合存储对象。键对应一个哈希表,哈希表内是字段(field)和值(value)的映射。
- 应用场景:存储用户信息、商品信息等对象。
2. 常用命令
设置与获取字段值
-  HSET key field value [NX|XX]:设置哈希表中字段的值。示例: HSET user:1001 name "Alice" HSET user:1001 age 30 HSET user:1001 phone 123456 # 仅当字段不存在时设置
-  HGET key field:获取哈希表中指定字段的值。示例: HGET user:1001 name
-  HMSET key field1 value1 field2 value2 ...:同时设置多个字段的值。示例: HMSET user:1002 name "Bob" age 25
-  HMGET key field1 field2 ...:同时获取多个字段的值。示例: HMGET user:1002 name age
-  HGETALL key:获取哈希表中所有的字段和值。示例: HGETALL user:1001
字段存在性与删除
-  HEXISTS key field:检查哈希表中是否存在指定字段。示例: HEXISTS user:1001 email
-  HDEL key field1 [field2 ...]:删除哈希表中的一个或多个字段。示例: HDEL user:1001 age
获取字段信息
-  HLEN key:获取哈希表中字段的数量。示例: HLEN user:1001
-  HKEYS key:获取哈希表中的所有字段名。示例: HKEYS user:1001
-  HVALS key:获取哈希表中的所有值。示例: HVALS user:1001
增加或减少数值字段
-  HINCRBY key field increment:将哈希表中指定字段的值增加指定整数。示例: HINCRBY user:1001 age 1
五、List
1. 简介
- 类型描述:列表是一个有序的字符串链表,可以在头部或尾部添加和删除元素。
- 应用场景:消息队列、任务列表、文章评论等。
2. 常用命令
元素添加
-  LPUSH key value1 [value2 ...]:将一个或多个值插入到列表头部。示例: LPUSH mylist "world" LPUSH mylist "hello"
-  RPUSH key value1 [value2 ...]:将一个或多个值插入到列表尾部。示例: RPUSH mylist "redis"
元素获取
-  LRANGE key start stop:获取列表中指定范围的元素。示例: LRANGE mylist 0 -1 # 获取所有元素
-  LINDEX key index:获取列表中指定索引的元素。示例: LINDEX mylist 0 # 获取第一个元素
元素删除
-  LPOP key:移除并返回列表的头元素。示例: LPOP mylist
-  RPOP key:移除并返回列表的尾元素。示例: RPOP mylist
列表长度
-  LLEN key:获取列表的长度。示例: LLEN mylist
指定位置插入
-  LINSERT key BEFORE|AFTER pivot value:在列表的指定元素前或后插入元素。示例: LINSERT mylist BEFORE "world" "there"
修剪列表
-  LTRIM key start stop:对列表进行修剪,只保留指定范围的元素。示例: LTRIM mylist 0 2
六、Set
1. 简介
- 类型描述:集合是一个无序的、唯一的字符串集合。
- 应用场景:标签、好友关系、去重操作等。
2. 常用命令
添加与获取成员
-  SADD key member1 [member2 ...]:向集合添加一个或多个成员。示例: SADD myset "apple" "banana" "cherry"
-  SMEMBERS key:获取集合中的所有成员。示例: SMEMBERS myset
删除成员
-  SREM key member1 [member2 ...]:移除集合中的一个或多个成员。示例: SREM myset "banana"
成员存在性
-  SISMEMBER key member:判断成员是否存在于集合中。示例: SISMEMBER myset "apple"
集合运算
-  SINTER key1 [key2 ...]:返回给定所有集合的交集。示例: SINTER set1 set2
-  SUNION key1 [key2 ...]:返回所有给定集合的并集。示例: SUNION set1 set2
-  SDIFF key1 [key2 ...]:返回第一个集合与其他集合的差集。示例: SDIFF set1 set2
随机获取和删除成员
-  SRANDMEMBER key [count]:随机返回集合中的一个或多个成员。示例: SRANDMEMBER myset SRANDMEMBER myset 2
-  SPOP key [count]:随机移除并返回集合中的一个或多个成员。示例: SPOP myset SPOP myset 2
七、Sorted Set
1. 简介
- 类型描述:有序集合与集合类似,但每个成员都会关联一个分数(score),集合中的成员是 唯一 的,但分数可以重复。成员按分数从小到大排序。
- 应用场景:排行榜、带权重的消息队列等。
2. 常用命令
添加与获取成员
-  ZADD key [NX|XX] [CH] [INCR] score member [score member ...]:向有序集合添加一个或多个成员,或更新已存在成员的分数。示例: ZADD myzset 1 "one" 2 "two" 3 "three"
-  ZRANGE key start stop [WITHSCORES]:按照分数从小到大,返回指定区间内的成员。示例: ZRANGE myzset 0 -1 # 获取所有成员 ZRANGE myzset 0 -1 WITHSCORES # 同时返回分数
-  ZREVRANGE key start stop [WITHSCORES]:按照分数从大到小,返回指定区间内的成员。示例: ZREVRANGE myzset 0 -1
获取成员分数和排名
-  ZSCORE key member:获取指定成员的分数。示例: ZSCORE myzset "one"
-  ZRANK key member:获取指定成员的排名(从 0 开始),按分数从小到大。示例: ZRANK myzset "two"
-  ZREVRANK key member:获取指定成员的排名,按分数从大到小。示例: ZREVRANK myzset "two"
删除成员
-  ZREM key member [member ...]:移除一个或多个成员。示例: ZREM myzset "two"
按分数或排名范围获取成员
-  ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:返回指定分数范围内的成员。示例: ZRANGEBYSCORE myzset 1 2
-  ZCOUNT key min max:返回指定分数范围内的成员数量。示例: ZCOUNT myzset 1 2
八、通用命令
键操作命令
查找键
-  KEYS pattern:查找所有符合给定模式的键。-  示例: KEYS user:*注意: KEYS命令在键数量较多时可能会阻塞服务器,生产环境中应避免使用。
 
-  
键的存在性和删除
-  EXISTS key:检查给定键是否存在。-  示例: EXISTS mykey
 
-  
-  DEL key [key ...]:删除一个或多个键。-  示例: DEL key1 key2
 
-  
键的过期和持久化
-  EXPIRE key seconds:为给定键设置过期时间(秒)。-  示例: EXPIRE mykey 60
 
-  
-  TTL key:获取键的剩余生存时间(秒)。-  示例: TTL mykey
 
-  
-  PERSIST key:移除键的过期时间,使其永久存在。-  示例: PERSIST mykey
 
-  
键的类型和重命名
-  TYPE key:返回键所存储的值的类型。-  示例: TYPE mykey
 
-  
-  RENAME key newkey:重命名键。-  示例: RENAME oldkey newkey
 
-  
其他键操作
-  RANDOMKEY:随机返回一个键。-  示例: RANDOMKEY
 
-  
-  DBSIZE:返回当前数据库的键的数量。-  示例: DBSIZE
 
-