Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis 命令实战

Redis 命令详解与实战案例

作者:Lisonseekpan

本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统,感兴趣的朋友跟随小编一起看看吧

Redis 命令详解与实战案例

一、Redis 基础介绍

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,支持多种数据结构,可用作数据库、缓存和消息代理。它提供字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等多种数据结构的存储。

二、Redis 核心数据结构与命令

1. 字符串(Strings)

最基础的数据类型,可存储文本、数字或二进制数据(最大512MB)。

常用命令:
命令语法说明
SETSET key value [EX seconds]设置键值对(带过期时间)
GETGET key获取键值
INCRINCR key值增加1(整数操作)
DECRDECR key值减少1(整数操作)
APPENDAPPEND key value追加值到现有字符串
STRLENSTRLEN key获取字符串长度
实战案例:
# 设置用户会话
> SET user:1000:session "session_token" EX 3600# 1小时后过期
# 网站访问计数器
> SET visits 0
> INCR visits# 访问量+1
(integer) 1
> INCR visits
(integer) 2
# 缓存商品信息
> SET product:1234:name "iPhone 15 Pro"
> GET product:1234:name
"iPhone 15 Pro"

2. 哈希(Hashes)

键值对集合,适合存储对象(如用户信息)。

常用命令:
命令语法说明
HSETHSET key field value设置哈希字段值
HGETHGET key field获取哈希字段值
HGETALLHGETALL key获取所有字段和值
HDELHDEL key field删除字段
HINCRBYHINCRBY 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)

有序字符串集合,支持从两端插入/删除元素,实现队列和栈。

常用命令:
命令语法说明
LPUSHLPUSH key value [value …]左侧插入元素
RPUSHRPUSH key value [value …]右侧插入元素
LPOPLPOP key左侧弹出元素
RPOPRPOP key右侧弹出元素
LRANGELRANGE key start stop获取列表片段
LTRIMLTRIM key start stop修剪列表
实战案例:
# 消息队列(生产者)
> LPUSH notifications "Order #1001 shipped"
> LPUSH notifications "User login alert"
# 消息队列(消费者)
> RPOP notifications
"Order #1001 shipped"
# 最新动态(保留最近的10条)
> LPUSH user:1000:activity "Liked post #123"
> LTRIM user:1000:activity 0 9# 只保留前10条

4. 集合(Sets)

无序的唯一字符串集合,支持交集、并集等操作。

常用命令:
命令语法说明
SADDSADD key member [member …]添加成员
SREMSREM key member [member …]移除成员
SMEMBERSSMEMBERS key获取所有成员
SISMEMBERSISMEMBER key member检查成员是否存在
SINTERSINTER 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)

带分数的有序集合,元素按分数排序,适合排行榜场景。

常用命令:
命令语法说明
ZADDZADD key score member添加成员(带分数)
ZRANGEZRANGE key start stop [WITHSCORES]按索引范围获取成员
ZREVRANGEZREVRANGE key start stop [WITHSCORES]按索引倒序获取成员
ZRANKZRANK key member获取成员排名(升序)
ZREVRANKZREVRANK key member获取成员排名(降序)
实战案例:
# 游戏排行榜
> ZADD leaderboard 2500 "PlayerA"
> ZADD leaderboard 3200 "PlayerB"
> ZADD leaderboard 1800 "PlayerC"
# 获取前3名
> ZREVRANGE leaderboard 0 2 WITHSCORES
1) "PlayerB"
2) "3200"
3) "PlayerA"
4) "2500"
5) "PlayerC"
6) "1800"
# 更新玩家分数
> ZADD leaderboard 3500 "PlayerB"# 更新分数

三、Redis 高级功能与命令

1. 键管理命令

命令语法说明
KEYSKEYS pattern查找匹配的键
DELDEL key [key …]删除键
EXPIREEXPIRE key seconds设置键过期时间
TTLTTL key查看键剩余生存时间
TYPETYPE key查看键的数据类型
实战案例:
> SET session:abc123 "user_data" EX 1800# 30分钟后过期
> TTL session:abc123
(integer) 1798
> KEYS session:*# 查找所有会话键
1) "session:abc123"

2. 事务操作(MULTI/EXEC)

> MULTI# 开始事务
> SET balance:1000 500
> DECRBY balance:1000 100# 扣款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)

# 终端1:订阅频道
> SUBSCRIBE news
# 终端2:发布消息
> PUBLISH news "Breaking: Redis 7 released!"

四、Redis 最佳实践与性能优化

1. 键命名规范

2. 内存优化技巧

# 使用哈希压缩小型对象
> HSET user:1000 name "Alice" age 30
# 比多个独立键更节省内存:
# SET user:1000:name "Alice"
# SET user:1000:age 30

3. 批量操作提升性能

# 管道(Pipeline)操作
(echo -en "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379
# 现代客户端支持(如Redis-py)
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扩展命令)
> SET lock:order_1234 UUID NX EX 30
# 释放锁(Lua脚本保证原子性)
> 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"
# 获取前10名
> 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)深入学习每个命令的详细参数和使用场景。

到此这篇关于Redis 命令详解与实战案例的文章就介绍到这了,更多相关Redis 命令实战内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文