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