目录
一、概述
二、数据类型
三、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
-