第四章 基本操作 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 # 匹配模式,*表示匹配任意个字符、?表示匹配单个字符