Redis 命令详解与实战案例

 更新时间:2025年11月24日 14:49:58   作者: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. 键命名规范

  • 使用冒号分隔的命名空间: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 "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 命令实战内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文详解Redis在Ubuntu系统上的安装步骤

    一文详解Redis在Ubuntu系统上的安装步骤

    安装redis在Ubuntu上有多种方法,下面这篇文章主要给大家介绍了关于Redis在Ubuntu系统上安装的相关资料,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • Redis安全策略详解

    Redis安全策略详解

    缓存穿透是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。用户拿不到数据时,就会一直发请求,查询数据库,这样会对数据库的访问造成很大的压力
    2022-07-07
  • Redis实现和数据库的数据同步

    Redis实现和数据库的数据同步

    本文介绍了Redis与传统数据库数据同步的几种常见方法,包括CacheAside、WriteThrough、WriteBehind,以及如何通过分布式事务、乐观锁、数据过期策略和消息队列来解决数据一致性问题,每种方法都有其适用场景和优缺点,需要根据具体需求进行选择
    2025-01-01
  • 解决linux下redis数据库overcommit_memory问题

    解决linux下redis数据库overcommit_memory问题

    这篇文章介绍了解决linux下redis数据库overcommit_memory问题的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • 浅谈Redis Key 命名规范文档

    浅谈Redis Key 命名规范文档

    本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下
    2025-05-05
  • Centos7.3安装Redis4.0.6详细图文教程

    Centos7.3安装Redis4.0.6详细图文教程

    这篇文章主要介绍了Centos7.3安装Redis4.0.6详细教程图解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例(详解)

    CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例(详解)

    这篇文章主要介绍了CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 关于Redis中bitmap的原理和使用详解

    关于Redis中bitmap的原理和使用详解

    这篇文章主要介绍了关于Redis中bitmap的原理和使用详解,BitMap即位图,使用每个位表示某种状态,适合处理整型的海量数据,本质上是哈希表的一种应用实现,需要的朋友可以参考下
    2023-05-05
  • Redis并发访问问题详细讲解

    Redis并发访问问题详细讲解

    本文主要介绍了Redis如何应对并发访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-12-12
  • Redis远程连接Redis客户端的实现步骤

    Redis远程连接Redis客户端的实现步骤

    本文主要介绍了Redis远程连接Redis客户端的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论