当前位置: 首页 > news >正文

Spring Boot使用Redis常用场景

Spring Boot使用Redis常用场景


一、概述:Redis 是什么?为什么要用它?

Redis(Remote Dictionary Server)是一个内存中的数据存储系统(类似一个“超级大字典”),它能存各种类型的数据(字符串、列表、哈希等),而且读写速度极快(因为数据存在内存里)。
简单说,Redis 就像电脑的“缓存抽屉”:当你的程序需要频繁读取或修改某些数据时(比如用户登录信息、商品销量),直接从 Redis 里拿,比从硬盘的数据库(如 MySQL)里拿快 10 倍甚至 更多倍!

二、Redis 支持的数据类型(5种最常用)

Redis 能存很多种“结构”的数据,就像不同形状的盒子,装不同的东西:

类型特点举例场景
字符串(String)最基础类型,存文本或数字(比如 “张三” 或 “100”)存用户手机号、商品库存数量
哈希(Hash)类似“小字典”,存键值对的集合(比如 {“name”:“张三”, “age”:18})存用户详细信息、商品属性
列表(List)有序的字符串列表(类似数组,可从左/右添加元素)存朋友圈动态列表、日志队列
集合(Set)无序、不重复的字符串集合(类似数学里的集合)存用户点赞的商品ID(去重)
有序集合(ZSet)类似集合,但每个元素有“分数”(按分数排序)存排行榜(比如积分排名)
三、Redis 的常见使用场景

Redis 能解决很多实际问题,最常用的 4 种场景:

  1. 缓存(最常用!):把高频访问的数据(比如商品详情、首页广告)存到 Redis,减少数据库查询次数。
  2. 计数器:用 Redis 的 INCR 命令(类似 +1 操作)统计文章阅读量、视频播放量,比数据库的 +1 快很多。
  3. 会话共享:多个服务器(比如 A 服务器和 B 服务器)共享用户登录状态(存 Redis 里,不用每个服务器单独存)。
  4. 分布式锁:在秒杀活动中,用 Redis 保证同一时间只有 1 个请求能修改库存(防止超卖)。
四、实际业务举例:商品详情页缓存

需求:用户访问商品详情页时,先从 Redis 查缓存;如果没有,再查数据库,并把结果存到 Redis(避免频繁查数据库)。

实现步骤

  1. 用户访问商品详情页(比如商品ID是 1001);
  2. 程序先查 Redis 是否有 product:1001 的缓存;
  3. 如果有,直接返回缓存数据;
  4. 如果没有,查 MySQL 数据库,拿到商品详情;
  5. 把商品详情存到 Redis(设 30 分钟过期),再返回给用户。
@Service
public class ProductService {@Autowiredprivate ProductMapper productMapper;  // 操作数据库的类(假设已定义)@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public Product getProductDetail(Long productId) {String key = "product:" + productId;// 1. 先查 Redis 缓存Product product = (Product) redisTemplate.opsForValue().get(key);if (product != null) {return product; // 缓存有数据,直接返回}// 2. 缓存没有,查数据库product = productMapper.selectById(productId); // 3. 把数据库结果存到 Redis(设 30 分钟过期)if (product != null) {redisTemplate.opsForValue().set(key, product, 30, TimeUnit.MINUTES);}return product;}
}
五、总结:使用 Redis 的注意事项
  1. 缓存过期时间:一定要给缓存设过期时间(比如 30 分钟),否则 Redis 内存会被占满!
  2. 避免缓存击穿:高并发时,如果某个热点缓存突然过期(比如秒杀商品),会导致大量请求同时查数据库。可以用“分布式锁”(比如 Redis 的 setIfAbsent 命令)保证只有 1 个请求查数据库,其他请求等缓存更新。
  3. 数据一致性:如果数据库数据修改了,要及时删除或更新 Redis 里的旧缓存(比如用户修改了商品价格,要删除 product:1001 的缓存)。
  4. 内存监控:用 redis-cli 命令(或可视化工具如 RedisDesktopManager)监控内存使用情况,避免内存不足。
http://www.lqws.cn/news/535789.html

相关文章:

  • Python爬虫多线程并发时的503错误处理最佳实践
  • HTTP-Cookie和Session
  • 算法第48天|单调栈:42. 接雨水、84.柱状图中最大的矩形
  • 鸿蒙边缘智能计算架构实战:从环境部署到分布式推理全流程
  • window显示驱动开发—DirectX 图形内核子系统(一)
  • 树莓派超全系列教程文档--(67)rpicam-apps可用选项介绍之检测选项
  • 算法-最大子数组
  • 【Python】For
  • Agentic AI爆发前夜,合作伙伴如何把握时代机遇?
  • 2D写实交互数字人如何重塑服务体验?
  • MP1652GTF-Z:MPS高效3A降压转换器 工业5G通信专用
  • windows内核句柄判断有效
  • LeetCode刷题-top100(和为 K 的子数组)
  • ISP Pipeline(4): Anti Aliasing Noise Filter 抗锯齿与降噪滤波器
  • 【thinkphp5】Session和Cache记录微信accesstoken
  • QT实现一个三轴位移台的控制界面
  • QT Creator构建失败:-1: error: Unknown module(s) in QT: serialport
  • 【CMake基础入门教程】第七课:查找并使用第三方库(以 find_package() 为核心)
  • 【缓存技术】深入分析如果使用好缓存及注意事项
  • Flux.create
  • Linux 内核 TCP 的核心引擎:tcp_input.c 与 tcp_output.c 的协同之道
  • ubuntu安装docker遇到权限问题
  • TCP 重传机制详解:原理、变体与故障排查应用
  • 利用python和libredwg库解析dwg格式文件输出GeoJSON
  • Mac电脑如何搭建基于java后端的开发的各种工具服务
  • 自动获取文件的内存大小怎么设置?批量获取文件名和内存大小到Excel中的方法
  • IDEA下载不了插件了怎么办?从本地导入插件详细教程!
  • ubuntu 远程桌面 xrdp + frp
  • 【工具推荐】WaybackLister——发现潜在目录列表
  • OpenBayes 一周速览丨Nanonets-OCR-s深度语义理解,精准结构化转换;HLE人类问题推理基准上线,含2.5k题目,助力封闭式评估体系构建