本文目录导读:

- 通用键操作
- 字符串操作
- 哈希操作(常用于存储对象)
- 列表操作(常用于消息队列、最新消息列表)
- 集合操作(常用于标签、去重、共同好友)
- 有序集合操作(常用于排行榜、延迟队列、限流)
- 事务与脚本相关命令
- 编写脚本时的注意事项
- 应用场景示例(Lua 脚本实现)
在脚本(Lua 脚本或应用程序代码)中操作 Redis, 常用命令主要分为几类:键值操作、字符串操作、哈希操作、列表操作、集合操作、有序集合操作,以及事务与脚本相关命令。
以下是具体分类与常用命令:
通用键操作
EXISTS key:检查键是否存在。DEL key [key ...]:删除一个或多个键。TYPE key:返回键所存储值的类型。EXPIRE key seconds:设置键的过期时间(秒)。TTL key:查看键剩余的生存时间。KEYS pattern:查找所有符合给定模式的键(生产环境慎用,可能阻塞)。SCAN cursor [MATCH pattern] [COUNT count]:迭代数据库中的键,用于替代KEYS(推荐)。
字符串操作
SET key value:设置指定键的值。GET key:获取指定键的值。MSET key value [key value ...]:同时设置一个或多个键值对。MGET key [key ...]:获取所有给定键的值。INCR key:将键中储存的数字值增一。DECR key:将键中储存的数字值减一。INCRBY key increment:将键储存的数字值增加指定的增量。GETSET key value:将键的值设为新值,并返回旧值。SETNX key value:仅在键不存在时设置值(常用于分布式锁)。SETEX key seconds value:设置键值并同时设置过期时间(原子操作)。
哈希操作(常用于存储对象)
HSET key field value:将哈希表key中的字段field的值设为value。HGET key field:获取哈希表key中指定字段的值。HMSET key field value [field value ...]:同时将多个字段-值对设置到哈希表key中。HMGET key field [field ...]:获取哈希表key中一个或多个给定字段的值。HGETALL key:获取哈希表key中所有的字段和值(慎用,数据量大时阻塞)。HKEYS key:获取哈希表key中所有字段名。HVALS key:获取哈希表key中所有值。HDEL key field [field ...]:删除一个或多个哈希表字段。HEXISTS key field:查看哈希表key中指定字段是否存在。HINCRBY key field increment:为哈希表key中的指定字段的整数值加上增量。
列表操作(常用于消息队列、最新消息列表)
LPUSH key value [value ...]:将一个或多个值插入到列表头部。RPUSH key value [value ...]:将一个或多个值插入到列表尾部。LPOP key:移除并获取列表第一个元素。RPOP key:移除并获取列表最后一个元素。BLPOP key [key ...] timeout:移出并获取列表的第一个元素,如果列表没有元素会阻塞直到超时或发现可弹出元素。BRPOP key [key ...] timeout:移出并获取列表的最后一个元素,如果列表没有元素会阻塞直到超时或发现可弹出元素。LLEN key:获取列表长度。LRANGE key start stop:获取列表指定范围内的元素(常用0 -1获取所有)。LTRIM key start stop:对一个列表进行修剪,保留指定区间内的元素(常用于固定长度队列)。
集合操作(常用于标签、去重、共同好友)
SADD key member [member ...]:向集合添加一个或多个成员。SREM key member [member ...]:移除集合中一个或多个成员。SMEMBERS key:返回集合中的所有成员(慎用,数据量大时阻塞)。SISMEMBER key member:判断成员元素是否是集合的成员。SCARD key:获取集合的成员数。SINTER key [key ...]:返回给定所有集合的交集。SUNION key [key ...]:返回所有给定集合的并集。SDIFF key [key ...]:返回第一个集合与其他集合之间的差集。SSCAN key cursor [MATCH pattern] [COUNT count]:迭代集合中的元素(替代SMEMBERS)。
有序集合操作(常用于排行榜、延迟队列、限流)
ZADD key score member [score member ...]:向有序集合添加一个或多个成员,或者更新已存在成员的分数。ZREM key member [member ...]:移除有序集合中的一个或多个成员。ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合指定区间内的成员。ZREVRANGE key start stop [WITHSCORES]:返回有序集中指定区间内的成员,分数从高到低。ZRANK key member:返回有序集合中指定成员的排名(从小到大)。ZREVRANK key member:返回有序集合中指定成员的排名(从大到小)。ZSCORE key member:返回有序集中,成员的分数值。ZINCRBY key increment member:有序集合中对指定成员的分数加上增量。ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:通过分数返回有序集合指定区间内的成员。ZCOUNT key min max:计算在有序集合中指定分数区间的成员数量。ZCARD key:获取有序集合的成员数(用于排行榜总人数)。ZREMRANGEBYSCORE key min max:移除有序集合中给定分数区间的所有成员(用于清理过期数据)。
事务与脚本相关命令
MULTI:标记一个事务块的开始。EXEC:执行所有事务块内的命令。DISCARD:取消事务。WATCH key [key ...]:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断(乐观锁)。EVAL script numkeys key [key ...] arg [arg ...]:执行 Lua 脚本。EVALSHA sha1 numkeys key [key ...] arg [arg ...]:根据给定的 sha1 校验码,执行缓存在服务器中的脚本。
编写脚本时的注意事项
- 避免阻塞命令:在脚本(尤其是 Lua 脚本)中尽量避免使用
KEYS、SMEMBERS、HGETALL、LRANGE等可能返回大量数据的命令,优先使用SCAN、SSCAN等增量迭代。 - 逻辑复杂度:Lua 脚本在 Redis 中是原子执行的,应保持逻辑简洁,避免长时间占满 CPU 导致其他请求阻塞。
- 参数传递:在 Lua 脚本中,键名通过
KEYS[]数组传入,其他参数通过ARGV[]传入,不要直接在脚本字符串中拼接,这样可以充分利用 Redis 的缓存机制,避免重复编译脚本。 - 错误处理:脚本如果执行出错,整个脚本的修改都会被回滚(原子性)。
应用场景示例(Lua 脚本实现)
- 原子性的扣减库存:
return redis.call(‘DECRBY’, KEYS[1], ARGV[1]) - 限流(滑动窗口):结合
ZREM、ZADD、ZCOUNT操作有序集合。 - 分布式锁:使用
SETNX+EXPIRE(或SET的NX+EX扩展参数)。 - 延迟队列:使用
ZADD添加任务,轮询ZRANGEBYSCORE拉取到期任务。
掌握以上命令,基本可以覆盖脚本开发中 90% 以上的 Redis 操作需求。