脚本中Redis操作有哪些常用命令

wen 实用脚本 1

本文目录导读:

脚本中Redis操作有哪些常用命令

  1. 通用键操作
  2. 字符串操作
  3. 哈希操作(常用于存储对象)
  4. 列表操作(常用于消息队列、最新消息列表)
  5. 集合操作(常用于标签、去重、共同好友)
  6. 有序集合操作(常用于排行榜、延迟队列、限流)
  7. 事务与脚本相关命令
  8. 编写脚本时的注意事项
  9. 应用场景示例(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 校验码,执行缓存在服务器中的脚本。

编写脚本时的注意事项

  1. 避免阻塞命令:在脚本(尤其是 Lua 脚本)中尽量避免使用 KEYSSMEMBERSHGETALLLRANGE 等可能返回大量数据的命令,优先使用 SCANSSCAN 等增量迭代。
  2. 逻辑复杂度:Lua 脚本在 Redis 中是原子执行的,应保持逻辑简洁,避免长时间占满 CPU 导致其他请求阻塞。
  3. 参数传递:在 Lua 脚本中,键名通过 KEYS[] 数组传入,其他参数通过 ARGV[] 传入,不要直接在脚本字符串中拼接,这样可以充分利用 Redis 的缓存机制,避免重复编译脚本。
  4. 错误处理:脚本如果执行出错,整个脚本的修改都会被回滚(原子性)。

应用场景示例(Lua 脚本实现)

  • 原子性的扣减库存return redis.call(‘DECRBY’, KEYS[1], ARGV[1])
  • 限流(滑动窗口):结合 ZREMZADDZCOUNT 操作有序集合。
  • 分布式锁:使用 SETNX + EXPIRE(或 SETNX + EX 扩展参数)。
  • 延迟队列:使用 ZADD 添加任务,轮询 ZRANGEBYSCORE 拉取到期任务。

掌握以上命令,基本可以覆盖脚本开发中 90% 以上的 Redis 操作需求。

抱歉,评论功能暂时关闭!