Redis 常用命令总结

在日常开发中,Redis 作为高性能的键值存储数据库,被广泛应用于缓存、消息队列、排行榜等场景。本文总结了开发中最常用的 Redis 命令,帮助你快速查阅和使用。

一. 基础操作

1.1 连接与通用命令

markdown 复制代码
# 连接 Redis
redis-cli
redis-cli -h 127.0.0.1 -p 6379
redis-cli -a password

# 切换数据库
SELECT 0-15  # Redis 默认有16个数据库

# 清空当前数据库
FLUSHDB

# 清空所有数据库
FLUSHALL

# 查看 key 的数量
DBSIZE

# 查看服务器信息
INFO

# 测试连接
PING

1.2 Key 操作

bash 复制代码
# 设置键值对(带过期时间)
SET key value
SET key value EX 3600    # 3600秒后过期
SET key value PX 300000  # 300000毫秒后过期

# 获取值
GET key

# 删除 key
DEL key1 key2 key3

# 判断 key 是否存在
EXISTS key

# 设置过期时间
EXPIRE key 3600        # 3600秒后过期
EXPIREAT key 1700000000 # 指定时间戳过期

# 查看剩余过期时间
TTL key          # 返回秒
PTTL key         # 返回毫秒

# 移除过期时间
PERSIST key

# 重命名 key
RENAME oldkey newkey
RENAMENX oldkey newkey  # 仅当 newkey 不存在时重命名

# 查找 key
KEYS pattern      # KEYS user:*  (生产环境慎用)
SCAN cursor MATCH pattern COUNT count  # SCAN 0 MATCH user:* COUNT 10 (推荐)

# 查看 key 类型
TYPE key

二、String(字符串)

bash 复制代码
# 设置和获取
SET key value
GET key
MGET key1 key2 key3    # 批量获取
MSET key1 val1 key2 val2 # 批量设置

# 数值操作
INCR key          # 自增1
INCRBY key 10     # 自增指定值
DECR key          # 自减1
DECRBY key 10     # 自减指定值

# 字符串追加
APPEND key value  # 返回字符串长度

# 获取长度
STRLEN key

# 截取子串
GETRANGE key 0 -1  # 0到-1表示全部

# 设置指定位置的值
SETRANGE key offset value

三、Hash(哈希)

bash 复制代码
# 设置字段
HSET key field value
HMSET key field1 value1 field2 value2

# 获取字段
HGET key field
HMGET key field1 field2

# 获取所有字段和值
HGETALL key

# 删除字段
HDEL key field1 field2

# 判断字段是否存在
HEXISTS key field

# 获取所有字段名
HKEYS key

# 获取所有字段值
HVALS key

# 获取字段数量
HLEN key

# 数值操作
HINCRBY key field 10
HINCRBYFLOAT key field 10.5

四、List(列表)

bash 复制代码
# 添加元素(左侧)
LPUSH key value1 value2
LPUSHX key value  # 仅当列表存在时添加

# 添加元素(右侧)
RPUSH key value1 value2
RPUSHX key value

# 弹出元素
LPOP key  # 左侧弹出
RPOP key  # 右侧弹出

# 获取列表范围内的元素
LRANGE key 0 -1  # 获取全部
LRANGE key 0 10  # 获取前11个

# 获取列表长度
LLEN key

# 删除指定值的元素
LREM key count value  # count>0从头删,count<0从尾删,count=0全删

# 获取指定索引的元素
LINDEX key index

# 设置指定索引的元素
LSET key index value

# 列表修剪
LTRIM key 0 100  # 保留0-100的元素,其他删除

# 阻塞操作(实现消息队列)
BLPOP key1 key2 timeout
BRPOP key1 key2 timeout

五、Set(集合)

bash 复制代码
# 添加元素
SADD key member1 member2

# 获取所有元素
SMEMBERS key

# 删除元素
SREM key member1 member2

# 判断元素是否存在
SISMEMBER key member

# 获取集合大小
SCARD key

# 随机弹出元素
SPOP key [count]

# 随机获取元素(不删除)
SRANDMEMBER key [count]

# 集合运算
SINTER key1 key2 key3    # 交集
SUNION key1 key2 key3     # 并集
SDIFF key1 key2           # 差集(key1有key2没有)

# 集合运算并存储结果
SINTERSTORE dest key1 key2
SUNIONSTORE dest key1 key2
SDIFFSTORE dest key1 key2

六、ZSet(有序集合)

bash 复制代码
# 添加元素
ZADD key score1 member1 score2 member2

# 获取分数范围内的元素(升序)
ZRANGE key 0 -1
ZRANGE key 0 -1 WITHSCORES  # 带分数

# 获取分数范围内的元素(降序)
ZREVRANGE key 0 -1
ZREVRANGE key 0 -1 WITHSCORES

# 按分数范围获取
ZRANGEBYSCORE key min max
ZREVRANGEBYSCORE key max min

# 获取元素排名(升序)
ZRANK key member

# 获取元素排名(降序)
ZREVRANK key member

# 获取元素分数
ZSCORE key member

# 获取指定分数范围内的元素数量
ZCOUNT key min max

# 获取集合大小
ZCARD key

# 删除元素
ZREM key member1 member2

# 按排名删除
ZREMRANGEBYRANK key 0 5

# 按分数删除
ZREMRANGEBYSCORE key min max

# 增加分数
ZINCRBY key increment member

七、常用应用场景

7.1 缓存场景

bash 复制代码
# 设置缓存
SET cache:user:1001 '{"id":1001,"name":"张三"}' EX 3600

# 获取缓存
GET cache:user:1001

# 删除缓存
DEL cache:user:1001

7.2 计数器

bash 复制代码
# 文章阅读量
INCR article:1001:views

# 点赞数
INCR post:1001:likes

# 批量点赞计数
INCRBY post:1001:likes 10

7.3 分布式锁

bash 复制代码
# 获取锁
SET lock:resource UNIQUE_VALUE NX PX 30000

# 释放锁(Lua脚本保证原子性)
EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 lock:resource UNIQUE_VALUE

7.4 排行榜

bash 复制代码
# 添加分数
ZADD leaderboard 95 "player1" 87 "player2" 92 "player3"

# 获取前10名
ZREVRANGE leaderboard 0 9 WITHSCORES

# 获取玩家排名
ZREVRANK leaderboard "player1"

# 增加分数
ZINCRBY leaderboard 5 "player1"

7.5 消息队列

bash 复制代码
# 生产者(左侧入队)
LPUSH queue:task '{"id":1,"type":"email"}'

# 消费者(右侧出队,阻塞5秒)
BRPOP queue:task 5

7.6 用户标签

bash 复制代码
# 添加标签
SADD user:1001:tags "程序员" "技术控" "音乐迷"

# 获取标签
SMEMBERS user:1001:tags

# 判断标签是否存在
SISMEMBER user:1001:tags "程序员"

# 查找共同标签的用户(交集)
SINTER user:1001:tags user:1002:tags
相关推荐
逻辑驱动的ken2 小时前
Java高频面试考点场景题09
java·开发语言·数据库·算法·oracle·哈希算法·散列表
解救女汉子2 小时前
MySQL并发写入如何避免锁竞争_使用队列缓冲与批量插入优化
jvm·数据库·python
qq_342295822 小时前
HTML函数开发需要SSD吗_SSD对HTML函数开发效率影响【详解】
jvm·数据库·python
qq_432703662 小时前
Golang怎么用embed嵌入SQL文件_Golang如何将SQL迁移文件嵌入Go程序统一管理【技巧】
jvm·数据库·python
Han.miracle2 小时前
Redis 全套笔记:基础 API + 三大架构 + 缓存三大问题
java·windows·redis
m0_640309302 小时前
如何将 sticky 元素精确定位到父容器的右上角
jvm·数据库·python
m0_377618232 小时前
c++如何将双精度浮点数以科学计数法写入文件_scientific标志【详解】
jvm·数据库·python
weixin_424999362 小时前
如何检测SQL注入风险_利用模糊测试技术发现漏洞
jvm·数据库·python
2301_775148152 小时前
如何用正则具名捕获组 (-) 提升复杂数据的提取效率
jvm·数据库·python