Redis 命令详解与实战案例 一、Redis 基础介绍Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,支持多种数据结构,可用作数据库、缓存和消息代理。它提供字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等多种数据结构的存储。
二、Redis 核心数据结构与命令 1. 字符串(Strings)最基础的数据类型,可存储文本、数字或二进制数据(最大512MB)。
常用命令:命令 语法 说明 SET SET key value [EX seconds] 设置键值对(带过期时间) GET GET key 获取键值 INCR INCR key 值增加1(整数操作) DECR DECR key 值减少1(整数操作) APPEND APPEND key value 追加值到现有字符串 STRLEN STRLEN key 获取字符串长度
实战案例:
> SET user:1000:session "session_token" EX 3600
> SET visits 0
> INCR visits
( integer) 1
> INCR visits
( integer) 2
> SET product:1234:name "iPhone 15 Pro"
> GET product:1234:name
"iPhone 15 Pro"
2. 哈希(Hashes)键值对集合,适合存储对象(如用户信息)。
常用命令:命令 语法 说明 HSET HSET key field value 设置哈希字段值 HGET HGET key field 获取哈希字段值 HGETALL HGETALL key 获取所有字段和值 HDEL HDEL key field 删除字段 HINCRBY HINCRBY key field increment 增加数值字段的值
实战案例:
> HSET user:1000 name "Alice" age 30 email "alice@example.com"
( integer) 3
> HGET user:1000 name
"Alice"
> HGETALL user:1000
1 ) "name"
2 ) "Alice"
3 ) "age"
4 ) "30"
5 ) "email"
6 ) "alice@example.com"
> HINCRBY user:1000 age 1
( integer) 31
3. 列表(Lists)有序字符串集合,支持从两端插入/删除元素,实现队列和栈。
常用命令:命令 语法 说明 LPUSH LPUSH key value [value …] 左侧插入元素 RPUSH RPUSH key value [value …] 右侧插入元素 LPOP LPOP key 左侧弹出元素 RPOP RPOP key 右侧弹出元素 LRANGE LRANGE key start stop 获取列表片段 LTRIM LTRIM key start stop 修剪列表
实战案例:
> LPUSH notifications "Order #1001 shipped"
> LPUSH notifications "User login alert"
> RPOP notifications
"Order #1001 shipped"
> LPUSH user:1000:activity "Liked post #123"
> LTRIM user:1000:activity 0 9
4. 集合(Sets)无序的唯一字符串集合,支持交集、并集等操作。
常用命令:命令 语法 说明 SADD SADD key member [member …] 添加成员 SREM SREM key member [member …] 移除成员 SMEMBERS SMEMBERS key 获取所有成员 SISMEMBER SISMEMBER key member 检查成员是否存在 SINTER SINTER key [key …] 多个集合的交集
实战案例:
> SADD user:1000:tags "sports" "music" "tech"
> SADD user:1001:tags "music" "food" "travel"
> SINTER user:1000:tags user:1001:tags
1 ) "music"
> SADD article:1234:viewers "user1000" "user1001"
> SADD article:1234:viewers "user1000" # 重复添加无效
( integer) 0
5. 有序集合(Sorted Sets)带分数的有序集合,元素按分数排序,适合排行榜场景。
常用命令:命令 语法 说明 ZADD ZADD key score member 添加成员(带分数) ZRANGE ZRANGE key start stop [WITHSCORES] 按索引范围获取成员 ZREVRANGE ZREVRANGE key start stop [WITHSCORES] 按索引倒序获取成员 ZRANK ZRANK key member 获取成员排名(升序) ZREVRANK ZREVRANK key member 获取成员排名(降序)
实战案例:
> ZADD leaderboard 2500 "PlayerA"
> ZADD leaderboard 3200 "PlayerB"
> ZADD leaderboard 1800 "PlayerC"
> ZREVRANGE leaderboard 0 2 WITHSCORES
1 ) "PlayerB"
2 ) "3200"
3 ) "PlayerA"
4 ) "2500"
5 ) "PlayerC"
6 ) "1800"
> ZADD leaderboard 3500 "PlayerB" # 更新分数
三、Redis 高级功能与命令 1. 键管理命令命令 语法 说明 KEYS KEYS pattern 查找匹配的键 DEL DEL key [key …] 删除键 EXPIRE EXPIRE key seconds 设置键过期时间 TTL TTL key 查看键剩余生存时间 TYPE TYPE key 查看键的数据类型
实战案例:
> SET session:abc123 "user_data" EX 1800
> TTL session:abc123
( integer) 1798
> KEYS session:*
1 ) "session:abc123"
2. 事务操作(MULTI/EXEC)
> MULTI
> SET balance:1000 500
> DECRBY balance:1000 100
> INCRBY sales:2023 100
> EXEC
1 ) OK
2 ) ( integer) 400
3 ) ( integer) 100
3. Lua 脚本支持
> EVAL "local current = redis.call('GET', KEYS[1]);
if current then
current = tonumber(current) + 1
else
current = 1
end;
redis.call('SET', KEYS[1], current);
return current" 1 page:views
4. 发布/订阅(Pub/Sub)
> SUBSCRIBE news
> PUBLISH news "Breaking: Redis 7 released!"
四、Redis 最佳实践与性能优化 1. 键命名规范使用冒号分隔的命名空间:user:1000:profile 避免过长的键名(影响内存和性能) 示例:order:2023:09:1234 2. 内存优化技巧
> HSET user:1000 name "Alice" age 30
3. 批量操作提升性能
( echo -en "PING\r \n PING\r \n PING\r \n " ; sleep 1 ) | nc localhost 6379
pipe = redis.pipeline( )
pipe.set( 'key1' , 'value1' )
pipe.get( 'key2' )
pipe.execute( )
4. 持久化策略选择策略 特点 RDB 定时快照,恢复快,可能丢失最后一次快照后的数据 AOF 记录所有写操作,数据更安全,文件较大 RDB+AOF 推荐方案,结合两者优势(Redis 4.0+ 支持)
五、Redis 实战应用场景 1. 缓存穿透解决方案
> BF.RESERVE products 0.01 1000000
> BF.ADD products "product:1234"
> BF.EXISTS products "product:5678" # 返回0表示不存在
2. 分布式锁实现
> SET lock:order_1234 UUID NX EX 30
> EVAL "if redis.call('GET', KEYS[1]) == ARGV[1] then
return redis.call('DEL', KEYS[1])
else
return 0
end" 1 lock:order_1234 UUID
3. 实时排行榜
> ZADD leaderboard 95 "PlayerA" 87 "PlayerB" 92 "PlayerC"
> ZREVRANGE leaderboard 0 9 WITHSCORES
> ZREVRANK leaderboard "PlayerB"
六、Redis 命令速查表类别 常用命令 通用 KEYS, DEL, EXISTS, EXPIRE, TTL, TYPE 字符串 SET, GET, INCR, DECR, APPEND, STRLEN 哈希 HSET, HGET, HGETALL, HDEL, HINCRBY 列表 LPUSH, RPUSH, LPOP, RPOP, LRANGE, LTRIM 集合 SADD, SREM, SMEMBERS, SISMEMBER, SINTER 有序集合 ZADD, ZRANGE, ZREVRANGE, ZRANK, ZREVRANK 事务 MULTI, EXEC, DISCARD, WATCH 发布订阅 PUBLISH, SUBSCRIBE, UNSUBSCRIBE
通过掌握这些核心命令和实战案例,您将能够高效地利用 Redis 构建高性能应用系统。建议结合 Redis 官方文档(https://redis.io/commands)深入学习每个命令的详细参数和使用场景。