本文目录导读:

- 通用键操作
- 字符串操作
- 哈希操作(常用于存储对象)
- 列表操作(常用于消息队列、最新消息列表)
- 集合操作(常用于标签、去重、共同好友)
- 有序集合操作(常用于排行榜、延迟队列、限流)
- 事务与脚本相关命令
- 编写脚本时的注意事项
- 应用场景示例(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 操作需求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播