IT俱乐部 Redis Redis 命令详解与实战案例

Redis 命令详解与实战案例

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# 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)

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

常用命令:
命令 语法 说明
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"
# 最新动态(保留最近的10条)
> LPUSH user:1000:activity "Liked post #123"
> LTRIM user:1000:activity 0 9# 只保留前10条

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"
# 获取前3名
> 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# 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. 键命名规范

  • 使用冒号分隔的命名空间:user:1000:profile
  • 避免过长的键名(影响内存和性能)
  • 示例:order:2023:09:1234

2. 内存优化技巧

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

3. 批量操作提升性能

# 管道(Pipeline)操作
(echo -en "PINGrnPINGrnPINGrn"; 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 命令实战内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/redis/17560.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部