Skip to content

第四章 基本操作 v1.0 ​

一、键(Key)相关操作 ​

bash
KEYS <pattern>  # 查找所有符合给定模式的key
EXISTS <key>  # 判断某个key是否存在
TYPE <key>  # 查看key的类型
DEL <key>  # 删除指定的key数据
UNLINK <key>  # 根据value选择非阻塞删除
MOVE <key> <db>  # 将当前数据库中的key移动到指定数据库
RENAME <key> <newkey>  # 修改key的名称
RENAMENX <key> <newkey>  # 仅当newkey不存在时修改key的名称
TTL <key>  # 查看还有多少秒过期,-1表示永不过期,-2表示已过期
PTTL <key>  # 以毫秒返回过期时间
EXPIRE <key> <seconds>  # 设置key的过期时间
PEXPIRE <key> <milliseconds>  # 以毫秒设置过期时间
PERSIST <key>  # 移除key的过期时间

二、字符串操作 ​

String 类型是 Redis 最基本的类型,一个 key 对应一个 value,字符串 value 最多可以是 512M。String 类型是二进制安全的,可以包含图片或序列化对象等任意数据。

bash
# 设置键值对
SET name "John"

# 获取值
GET name

# 设置带过期时间的键值对
SET session "abc" EX 3600

字符串还支持批量设置、条件设置、拼接和数值运算:

bash
SET <key> <value>  # 设置指定key的值
MSET <key1> <value1> [key2 value2 ...]  # 同时设置多个key-value对
SETNX <key> <value>  # 仅当key不存在时设置值
SETEX <key> <seconds> <value>  # 设置值并指定过期时间
GETSET <key> <value>  # 重设key的值并返回旧值
APPEND <key> <value>  # 将value追加到字符串末尾
GET <key>  # 获取指定key的值
MGET <key1> [key2 ...]  # 获取多个key的值
INCR <key>  # 将key中的数字值加1
INCRBY <key> <increment>  # 按指定增量增加数值
INCRBYFLOAT <key> <increment>  # 按指定浮点增量增加数值
DECR <key>  # 将key中的数字值减1
DECRBY <key> <decrement>  # 按指定减量减少数值

三、哈希操作 ​

Hash 是 field 和 value 的映射表,适合用于存储对象。每个 hash 可以存储 (2^{32}) - 1 个键值对(40多亿)。

bash
# 设置哈希
HSET user:1 name "John" age 25

# 获取哈希字段
HGET user:1 name

# 获取所有字段
HGETALL user:1

哈希类型的常用命令如下:

bash
HSET <key> <field> <value>  # 设置一个字段
HMSET <key> <field1> <value1> [field2 value2 ...]  # 设置多个字段
HSETNX <key> <field> <value>  # 仅当字段不存在时设置值
HGET <key> <field>  # 获取指定字段的值
HEXISTS <key> <field>  # 判断字段是否存在
HKEYS <key>  # 获取所有字段
HLEN <key>  # 获取字段数量
HMGET <key> <field1> [field2 ...]  # 获取多个字段的值
HVALS <key>  # 获取所有字段值
HSCAN <key> <cursor> [MATCH pattern] [COUNT count]  # 迭代查询字段
HDEL <key> <field1> [field2 ...]  # 删除一个或多个字段
HINCRBY <key> <field> <increment>  # 将字段的整数值增加指定数值
HINCRBYFLOAT <key> <field> <increment>  # 将字段的浮点值增加指定数值

四、列表操作 ​

List 是按照插入顺序排序的字符串列表,可以从头部或尾部添加元素。一个列表最多可以包含 (2^{32}) - 1 个元素。

bash
# 从左边推入
LPUSH mylist "world"
LPUSH mylist "hello"

# 获取列表元素
LRANGE mylist 0 -1

列表类型的常用命令如下:

bash
LINDEX <key> <index>  # 根据索引获取元素
LRANGE <key> <start_index> <stop_index>  # 获取指定范围的元素
LLEN <key>  # 获取列表长度
LINSERT <key> BEFORE|AFTER <pivot> <value>  # 在指定元素前后插入元素
LPUSH <key> <value1> [value2 ...]  # 从列表头部插入
RPUSH <key> <value1> [value2 ...]  # 从列表尾部插入
LPUSHX <key> <value>  # 向已存在的列表头部插入
RPUSHX <key> <value>  # 向已存在的列表尾部插入
LSET <key> <index> <value>  # 按索引设置元素
LREM <key> <count> <value>  # 移除列表元素
LTRIM <key> <start_index> <stop_index>  # 只保留指定区间
BLPOP <key1> [key2 ...] <timeout>  # 移出并获取列表第一个元素
BRPOP <key1> [key2 ...] <timeout>  # 移出并获取列表最后一个元素
BRPOPLPUSH <key1> <key2> <timeout>  # 从一个列表取出最后一个元素并插入另一个列表头部
RPOPLPUSH <key1> <key2>  # 移动列表最后一个元素
LPOP <key>  # 移出并获取第一个元素
RPOP <key>  # 移出并获取最后一个元素

索引 0 表示列表的第一个元素,-1 表示最后一个元素,也可以使用负数表示倒数位置。

五、集合操作 ​

Set 是 String 类型的无序集合,成员唯一。集合通过哈希表实现,添加、删除和查找的平均复杂度为 O(1)。集合最大的成员数为 (2^{32}) - 1(4294967295,每个集合可存储40多亿个成员)。

集合对象的编码可以是 intset 或者 hashtable。

bash
# 添加集合成员
SADD myset "hello"
SADD myset "world"

# 获取所有成员
SMEMBERS myset

集合类型的常用命令如下:

bash
SADD <key> <member1> [member2 ...]  # 添加一个或多个成员
SCARD <key>  # 获取成员数
SDIFF <key1> [key2]  # 获取差集
SDIFFSTORE <key> <key1> <key2>  # 计算差集并保存
SINTER <key1> [key2]  # 获取交集
SINTERSTORE <key> <key1> <key2>  # 计算交集并保存
SUNION <key1> [key2]  # 获取并集
SUNIONSTORE <key> <key1> <key2>  # 计算并集并保存
SMEMBERS <key>  # 获取所有成员
SRANDMEMBER <key> [count]  # 随机获取成员
SISMEMBER <key> <member>  # 判断成员是否存在
SSCAN <key> <cursor> [MATCH pattern] [COUNT count]  # 迭代查询成员
SMOVE <key1> <key2> <member>  # 移动成员
SPOP <key>  # 随机移出并返回一个成员
SREM <key> <member1> [member2 ...]  # 移除一个或多个成员

六、有序集合操作 ​

有序集合中的每个成员都会关联一个 double 类型的分数,Redis 会根据分数从小到大排序。成员不能重复,但分数可以重复。有序集合中最大的成员数为 (2^{32}) - 1(4294967295,每个集合可存储40多亿个成员)。

有序集合也是通过哈希表实现的,所以添加、删除、查找的复杂度都是 O(1)。

bash
# 添加成员及其分数
ZADD leaderboard 100 "John"

# 查询成员及分数
ZRANGE leaderboard 0 -1 WITHSCORES

# 查询指定成员的分数
ZSCORE leaderboard "John"

有序集合类型的常用命令如下:

bash
ZADD <key> <score1> <member1> [score2 member2 ...]  # 添加成员或更新分数
ZINTERSTORE <key> <numkeys> <key1> [key2 ...]  # 计算交集并保存
ZUNIONSTORE <key> <numkeys> <key1> [key2 ...]  # 计算并集并保存
ZINCRBY <key> <increment> <member>  # 增加成员分数
ZCARD <key>  # 获取成员数
ZCOUNT <key> <min> <max>  # 获取指定分数区间的成员数
ZLEXCOUNT <key> <min> <max>  # 获取指定字典区间的成员数
ZRANGE <key> <start> <stop> [WITHSCORES]  # 按分数从小到大获取成员
ZREVRANGE <key> <start> <stop> [WITHSCORES]  # 按分数从大到小获取成员
ZRANGEBYLEX <key> <min> <max> [LIMIT offset count]  # 按字典区间获取成员
ZREVRANGEBYLEX <key> <max> <min> [LIMIT offset count]  # 按倒序字典区间获取成员
ZRANGEBYSCORE <key> <min> <max> [WITHSCORES] [LIMIT]  # 按分数区间获取成员
ZREVRANGEBYSCORE <key> <max> <min> [WITHSCORES] [LIMIT]  # 按倒序分数区间获取成员
ZRANK <key> <member>  # 获取成员排名
ZREVRANK <key> <member>  # 按倒序获取成员排名
ZSCORE <key> <member>  # 获取成员分数
ZSCAN <key> <cursor> [MATCH pattern] [COUNT count]  # 迭代查询成员
ZREM <key> <member1> [member2 ...]  # 移除成员
ZREMRANGEBYLEX <key> <min> <max>  # 按字典区间移除成员
ZREMRANGEBYRANK <key> <start> <stop>  # 按排名区间移除成员
ZREMRANGEBYSCORE <key> <min> <max>  # 按分数区间移除成员

其中,cursor 是游标,0 表示重新开始;count 表示一次查询的数量;pattern 中的 * 匹配任意个字符,? 匹配单个字符。

七、相关命令解释 ​

bash
cursor  # 游标数字,0表示重新开始
count  # 对应游标,一次查询数量
pattern  # 匹配模式,*表示匹配任意个字符、?表示匹配单个字符