1. 首页 > Redis教程 > 正文

Redis教程FG011-Redis String缓存业务实战

本文档风哥主要介绍Redis String类型的缓存业务实战,包括String类型概念、String操作命令、String使用场景、String缓存规划、过期策略、内存优化、基础操作、高级操作、批量操作、过期操作以及实战案例等内容,风哥教程参考Redis官方文档Data types guide等内容编写,适合DBA人员和开发人员在生产环境中使用。

Part01-基础概念与理论知识

1.1 String类型概念

Redis String是最基本的数据类型,它可以存储任何形式的字符串,包括二进制数据。String类型的特点:

  • 存储容量:最大可存储512MB
  • 操作原子性:所有String操作都是原子的
  • 灵活存储:可以存储字符串、数字、二进制数据等
  • 常用操作:设置、获取、修改、删除等

1.2 String操作命令

# String操作命令

## 1. 基础命令
– SET:设置键值对
– GET:获取键对应的值
– DEL:删除键值对
– EXISTS:检查键是否存在
– TYPE:查看键的类型

## 2. 高级命令
– INCR:递增数字
– DECR:递减数字
– INCRBY:按指定步长递增
– DECRBY:按指定步长递减
– APPEND:追加字符串
– STRLEN:获取字符串长度
– GETRANGE:获取字符串范围
– SETRANGE:设置字符串范围

## 3. 过期命令
– EXPIRE:设置键的过期时间
– TTL:查看键的剩余过期时间
– PERSIST:移除键的过期时间
– SETEX:设置键值对并指定过期时间
– PSETEX:设置键值对并指定毫秒级过期时间

## 4. 批量命令
– MSET:批量设置键值对
– MGET:批量获取键对应的值
– MDEL:批量删除键值对

1.3 String使用场景

String类型的使用场景:

  • 缓存:存储用户信息、商品信息等
  • 计数器:网站访问量、商品库存等
  • 会话:存储用户会话信息
  • 分布式锁:基于SET命令的NX选项
  • 令牌:存储验证码、token等

更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 String缓存规划

生产环境String缓存规划:

  • 键命名规范:使用业务前缀+ID的方式,如user:1001
  • 数据结构:根据业务需求选择合适的数据结构
  • 过期时间:根据数据更新频率设置合理的过期时间
  • 内存预算:估算String类型占用的内存空间

2.2 过期策略

过期策略建议:

  • 热点数据:较短的过期时间(如5-10分钟)
  • 一般数据:中等过期时间(如1-2小时)
  • 稳定数据:较长的过期时间(如1天)
  • 永不过期数据:不设置过期时间
  • 随机过期时间:避免缓存雪崩

2.3 内存优化

# 内存优化

## 1. 键命名优化
– 使用简短的键名
– 避免使用过长的键名
– 使用统一的命名规范

## 2. 值优化
– 存储JSON格式时使用压缩
– 合理设置数据精度
– 避免存储过大的值

## 3. 过期时间优化
– 合理设置过期时间
– 使用随机过期时间避免缓存雪崩
– 定期清理过期数据

## 4. 批量操作优化
– 使用MSET/MGET减少网络开销
– 合理批量大小,避免命令过大

## 5. 内存淘汰策略
– 根据业务需求选择合适的淘汰策略
– 监控内存使用情况

学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 基础操作

# 基础操作

## 1. 设置键值对
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set user:1001 “{\”id\”:1001,\”name\”:\”fgedu01\”,\”age\”:20}”

# 输出示例
OK

## 2. 获取值
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get user:1001

# 输出示例
“{\”id\”:1001,\”name\”:\”fgedu01\”,\”age\”:20}”

## 3. 删除键
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 del user:1001

# 输出示例
(integer) 1

## 4. 检查键是否存在
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 exists user:1001

# 输出示例
(integer) 0

## 5. 查看键的类型
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 type user:1001

# 输出示例
string

3.2 高级操作

# 高级操作

## 1. 递增数字
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set counter 10
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 incr counter

# 输出示例
(integer) 11

## 2. 递减数字
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 decr counter

# 输出示例
(integer) 10

## 3. 按指定步长递增
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 incrby counter 5

# 输出示例
(integer) 15

## 4. 按指定步长递减
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 decrby counter 3

# 输出示例
(integer) 12

## 5. 追加字符串
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set greeting “Hello”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 append greeting ” Redis”

# 输出示例
(integer) 11

## 6. 获取字符串长度
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 strlen greeting

# 输出示例
(integer) 11

## 7. 获取字符串范围
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 getrange greeting 0 4

# 输出示例
“Hello”

## 8. 设置字符串范围
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 setrange greeting 6 “World”

# 输出示例
(integer) 11

$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get greeting

# 输出示例
“Hello World”

3.3 批量操作

# 批量操作

## 1. 批量设置键值对
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 mset user:1001 “{\”id\”:1001,\”name\”:\”fgedu01\”}” user:1002 “{\”id\”:1002,\”name\”:\”fgedu02\”}” user:1003 “{\”id\”:1003,\”name\”:\”fgedu03\”}”

# 输出示例
OK

## 2. 批量获取值
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 mget user:1001 user:1002 user:1003

# 输出示例
1) “{\”id\”:1001,\”name\”:\”fgedu01\”}”
2) “{\”id\”:1002,\”name\”:\”fgedu02\”}”
3) “{\”id\”:1003,\”name\”:\”fgedu03\”}”

## 3. 批量删除键
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 del user:1001 user:1002 user:1003

# 输出示例
(integer) 3

3.4 过期操作

# 过期操作

## 1. 设置键的过期时间(秒)
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set user:1001 “{\”id\”:1001,\”name\”:\”fgedu01\”}”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 expire user:1001 3600

# 输出示例
(integer) 1

## 2. 查看键的剩余过期时间(秒)
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 ttl user:1001

# 输出示例
(integer) 3599

## 3. 移除键的过期时间
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 persist user:1001

# 输出示例
(integer) 1

## 4. 设置键值对并指定过期时间
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 setex user:1001 3600 “{\”id\”:1001,\”name\”:\”fgedu01\”}”

# 输出示例
OK

## 5. 设置键值对并指定毫秒级过期时间
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 psetex user:1001 3600000 “{\”id\”:1001,\”name\”:\”fgedu01\”}”

# 输出示例
OK

风哥提示:Redis接口限流是保护系统的重要机制,合理的限流策略可以防止系统过载,确保系统的稳定性和可用性。在实际应用中,需要根据具体业务场景和数据特点,选择合适的限流算法和策略。

Part04-生产案例与实战讲解

4.1 用户信息缓存

# 用户信息缓存

## 1. 缓存用户信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 setex user:1001 3600 “{\”id\”:1001,\”name\”:\”fgedu01\”,\”age\”:20,\”email\”:\”fgedu01@fgedu.net.cn\”}”

# 输出示例
OK

## 2. 获取用户信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get user:1001

# 输出示例
“{\”id\”:1001,\”name\”:\”fgedu01\”,\”age\”:20,\”email\”:\”fgedu01@fgedu.net.cn\”}”

## 3. 更新用户信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 setex user:1001 3600 “{\”id\”:1001,\”name\”:\”fgedu01\”,\”age\”:21,\”email\”:\”fgedu01@fgedu.net.cn\”}”

# 输出示例
OK

## 4. 批量获取用户信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 msetex user:1002 3600 “{\”id\”:1002,\”name\”:\”fgedu02\”}” user:1003 3600 “{\”id\”:1003,\”name\”:\”fgedu03\”}”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 mget user:1001 user:1002 user:1003

# 输出示例
1) “{\”id\”:1001,\”name\”:\”fgedu01\”,\”age\”:21,\”email\”:\”fgedu01@fgedu.net.cn\”}”
2) “{\”id\”:1002,\”name\”:\”fgedu02\”}”
3) “{\”id\”:1003,\”name\”:\”fgedu03\”}”

4.2 商品信息缓存

# 商品信息缓存

## 1. 缓存商品信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 setex product:2001 7200 “{\”id\”:2001,\”name\”:\”Redis实战教程\”,\”price\”:99.9,\”stock\”:100}”

# 输出示例
OK

## 2. 获取商品信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get product:2001

# 输出示例
“{\”id\”:2001,\”name\”:\”Redis实战教程\”,\”price\”:99.9,\”stock\”:100}”

## 3. 更新商品库存
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 setex product:2001 7200 “{\”id\”:2001,\”name\”:\”Redis实战教程\”,\”price\”:99.9,\”stock\”:99}”

# 输出示例
OK

## 4. 批量缓存商品信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 msetex product:2002 7200 “{\”id\”:2002,\”name\”:\”MongoDB实战教程\”}” product:2003 7200 “{\”id\”:2003,\”name\”:\”ElasticSearch实战教程\”}”

# 输出示例
OK

4.3 计数器缓存

# 计数器缓存

## 1. 初始化计数器
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set page:views 0

# 输出示例
OK

## 2. 递增计数器
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 incr page:views

# 输出示例
(integer) 1

## 3. 按指定步长递增
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 incrby page:views 10

# 输出示例
(integer) 11

## 4. 递减计数器
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 decr page:views

# 输出示例
(integer) 10

## 5. 查看计数器值
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get page:views

# 输出示例
“10”

## 6. 商品库存计数器
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set stock:2001 100
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 decrby stock:2001 1

# 输出示例
(integer) 99

$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get stock:2001

# 输出示例
“99”

4.4 会话缓存

# 会话缓存

## 1. 存储会话信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 setex session:abc123 1800 “{\”user_id\”:1001,\”username\”:\”fgedu01\”,\”last_login\”:\”2026-04-07 10:00:00\”}”

# 输出示例
OK

## 2. 获取会话信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get session:abc123

# 输出示例
“{\”user_id\”:1001,\”username\”:\”fgedu01\”,\”last_login\”:\”2026-04-07 10:00:00\”}”

## 3. 刷新会话过期时间
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 expire session:abc123 1800

# 输出示例
(integer) 1

## 4. 查看会话剩余时间
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 ttl session:abc123

# 输出示例
(integer) 1799

## 5. 删除会话
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 del session:abc123

# 输出示例
(integer) 1

更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 最佳实践

Redis String缓存业务最佳实践:

  • 键命名规范:使用业务前缀+ID的方式,如user:1001,学习交流加群风哥微信: itpux-com
  • 合理设置过期时间:根据数据更新频率设置合适的过期时间
  • 使用批量操作:减少网络开销,提高性能
  • 监控内存使用:避免内存溢出
  • 缓存预热:系统启动时加载热点数据
  • 缓存降级:当Redis不可用时,回退到数据库

5.2 常见问题

常见问题及解决:

  • 缓存雪崩:使用随机过期时间,避免同时过期
  • 缓存穿透:使用布隆过滤器,过滤不存在的键
  • 缓存击穿:对热点数据设置永不过期或使用互斥锁
  • 内存溢出:设置合理的内存限制和淘汰策略
  • 数据不一致:采用合适的缓存更新策略

5.3 优化技巧

风哥提示:Redis String类型是最基本也是最常用的数据类型,合理使用String类型可以提高系统性能,减少数据库压力。在实际应用中,需要根据业务需求选择合适的操作命令和过期策略。

# 优化技巧

## 1. 键命名优化
– 使用简短的键名,如u:1001代替user:1001
– 使用统一的命名规范,便于管理
– 避免使用特殊字符

## 2. 数据结构优化
– 存储JSON时使用压缩格式
– 对于数字类型,直接存储数字而非字符串
– 避免存储过大的值

## 3. 操作优化
– 使用SETNX实现分布式锁
– 使用INCR/DECR实现计数器
– 使用MSET/MGET减少网络开销
– 使用SETEX设置过期时间,避免额外的EXPIRE命令

## 4. 内存优化
– 设置合理的maxmemory和maxmemory-policy
– 定期清理过期数据
– 使用Redis Cluster实现水平扩展

## 5. 监控优化
– 监控Redis内存使用情况
– 监控键的过期情况
– 监控命令执行时间

通过本文档的学习,您应该掌握了Redis String类型的基本操作和实战应用,能够在生产环境中合理使用String类型实现缓存业务。在实际应用中,需要根据具体业务场景选择合适的操作命令和过期策略,确保Redis的性能和稳定性。

风哥提示:Redis String类型是最基本也是最常用的数据类型,合理使用String类型可以提高系统性能,减少数据库压力。在实际应用中,需要根据业务需求选择合适的操作命令和过期策略。

from Redis视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息