Spring Boot使用Redis常用场景

发布于:2025-06-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

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 {
    @Autowired
    private ProductMapper productMapper;  // 操作数据库的类(假设已定义)
    @Autowired
    private 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)监控内存使用情况,避免内存不足。