本文档风哥主要介绍Redis String类型的缓存业务实战,包括String类型概念、String操作命令、String使用场景、String缓存规划、过期策略、内存优化、基础操作、高级操作、批量操作、过期操作以及实战案例等内容,风哥教程参考Redis官方文档Data types guide等内容编写,适合DBA人员和开发人员在生产环境中使用。
Part01-基础概念与理论知识
1.1 String类型概念
Redis String是最基本的数据类型,它可以存储任何形式的字符串,包括二进制数据。String类型的特点:
- 存储容量:最大可存储512MB
- 操作原子性:所有String操作都是原子的
- 灵活存储:可以存储字符串、数字、二进制数据等
- 常用操作:设置、获取、修改、删除等
1.2 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 优化技巧
## 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
