Redis实现商品信息对象缓存

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis实现商品信息对象缓存

优化秒杀系统性能:使用Redis实现商品信息对象缓存

在秒杀系统的开发中,为了提高系统性能和降低数据库压力,使用Redis进行对象缓存是一种常见的优化策略。本文将详细介绍如何在Spring Boot项目中,通过Redis缓存实现商品信息的对象缓存,以提高系统性能和响应速度。

1. 添加依赖

首先,确保在pom.xml中添加了Spring Boot和Redis的相关依赖:

<!-- Spring Boot -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2. 配置Redis

在application.properties或application.yml中配置Redis连接信息:

# Redis configuration
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
spring.redis.timeout=5000

3. 商品实体类

创建商品实体类,用于表示商品信息:

public class Goods {
    private Long id;
    private String name;
    private double price;
    // 省略构造函数、getter和setter等
}

4. 商品服务

创建商品服务类,负责从数据库中获取商品信息并进行缓存:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class GoodsService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    // 模拟从数据库中获取商品信息
    public Goods getGoodsById(Long goodsId) {
        // 实际中可以从数据库中查询商品信息
        Goods goods = new Goods();
        goods.setId(goodsId);
        goods.setName("Sample Goods");
        goods.setPrice(99.99);
        return goods;
    }
    // 获取商品信息,并进行缓存
    public Goods getCachedGoodsById(Long goodsId) {
        // 先尝试从缓存中获取商品信息
        Goods cachedGoods = (Goods) redisTemplate.opsForValue().get("goods:" + goodsId);
        // 如果缓存中不存在,则从数据库中获取,并放入缓存
        if (cachedGoods == null) {
            cachedGoods = getGoodsById(goodsId);
            // 将商品信息缓存到Redis中,设置过期时间为10分钟
            redisTemplate.opsForValue().set("goods:" + goodsId, cachedGoods, 10, TimeUnit.MINUTES);
        }
        return cachedGoods;
    }
}

5. 控制层

在控制层中调用商品服务,获取商品信息:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GoodsController {
    @Autowired
    private GoodsService goodsService;
    @GetMapping("/goods/{id}")
    public Goods getGoodsById(@PathVariable Long id) {
        return goodsService.getCachedGoodsById(id);
    }
}

在上述代码中,getCachedGoodsById方法先尝试从Redis缓存中获取商品信息,如果缓存中不存在,则从数据库中获取并放入缓存中。这样,下一次获取相同商品信息时就可以直接从Redis缓存中读取,避免频繁访问数据库。

6. 验证

运行应用程序,访问/goods/{id}接口,可以通过该接口获取商品信息,首次获取时从数据库中读取并放入Redis缓存,后续获取时直接从缓存中读取。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3天前
|
存储 缓存 NoSQL
Redis多级缓存指南:从前端到后端全方位优化!
本文探讨了现代互联网应用中,多级缓存的重要性,特别是Redis在缓存中间件的角色。多级缓存能提升数据访问速度、系统稳定性和可扩展性,减少数据库压力,并允许灵活的缓存策略。浏览器本地内存缓存和磁盘缓存分别优化了短期数据和静态资源的存储,而服务端本地内存缓存和网络内存缓存(如Redis)则提供了高速访问和分布式系统的解决方案。服务器本地磁盘缓存因I/O性能瓶颈和复杂管理而不推荐用于缓存,强调了内存和网络缓存的优越性。
22 1
|
5天前
|
缓存 NoSQL Redis
深度解析Redis的缓存双写一致性
【4月更文挑战第20天】
30 1
|
5天前
|
缓存 NoSQL 算法
Redis入门到通过之解决Redis缓存击穿、缓存穿透、缓存雪崩
Redis入门到通过之解决Redis缓存击穿、缓存穿透、缓存雪崩
12 0
|
5天前
|
存储 缓存 NoSQL
Redis入门到通关之解决Redis缓存一致性问题
Redis入门到通关之解决Redis缓存一致性问题
19 0
|
5天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
14 0
|
7天前
|
缓存 NoSQL Redis
软件体系结构 - 缓存技术(7)Redis持久化方法
【4月更文挑战第20天】软件体系结构 - 缓存技术(7)Redis持久化方法
80 14
|
2月前
|
缓存 NoSQL 安全
【Redis】缓存穿透
【Redis】缓存穿透
30 0
|
2月前
|
缓存 监控 NoSQL
解析Redis缓存雪崩及应对策略
解析Redis缓存雪崩及应对策略
|
2月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
7天前
|
存储 缓存 运维
软件体系结构 - 缓存技术(5)Redis Cluster
【4月更文挑战第20天】软件体系结构 - 缓存技术(5)Redis Cluster
137 10