Redis实现商品信息对象缓存

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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缓存,后续获取时直接从缓存中读取。

相关文章
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
13天前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
79 1
Redis专题-实战篇二-商户查询缓存
|
5月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
720 0
|
13天前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
5月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
186 32
|
5月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
105 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
|
7月前
|
缓存 NoSQL Java
Redis应用—8.相关的缓存框架
本文介绍了Ehcache和Guava Cache两个缓存框架及其使用方法,以及如何自定义缓存。主要内容包括:Ehcache缓存框架、Guava Cache缓存框架、自定义缓存。总结:Ehcache适合用作本地缓存或与Redis结合使用,Guava Cache则提供了更灵活的缓存管理和更高的并发性能。自定义缓存可以根据具体需求选择不同的数据结构和引用类型来实现特定的缓存策略。
394 16
Redis应用—8.相关的缓存框架
|
7月前
|
缓存 监控 NoSQL
Redis--缓存击穿、缓存穿透、缓存雪崩
缓存击穿、缓存穿透和缓存雪崩是Redis使用过程中可能遇到的常见问题。理解这些问题的成因并采取相应的解决措施,可以有效提升系统的稳定性和性能。在实际应用中,应根据具体场景,选择合适的解决方案,并持续监控和优化缓存策略,以应对不断变化的业务需求。
1293 29
|
10月前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
382 85
|
6月前
|
人工智能 缓存 NoSQL
Redis 与 AI:从缓存到智能搜索的融合之路
Redis 已从传统缓存系统发展为强大的 AI 支持平台,其向量数据库功能和 RedisAI 模块为核心,支持高维向量存储、相似性搜索及模型服务。文章探讨了 Redis 在实时数据缓存、语义搜索与会话持久化中的应用场景,并通过代码案例展示了与 Spring Boot 的集成方式。总结来看,Redis 结合 AI 技术,为现代应用提供高效、灵活的解决方案。