springboot 整合redis,实现商品排行榜更新

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: springboot 整合redis,实现商品排行榜更新

在现代电子商务平台中,商品排行榜是一个非常重要的功能,它可以帮助用户快速找到热门商品并提高用户的购买欲望。通过整合Spring Boot和Redis,可以实现高效的商品排行榜更新和查询。以下是整合过程和关键代码的详细描述。

整合步骤

1. 创建Spring Boot项目

首先,使用Spring Initializr创建一个新的Spring Boot项目。在项目中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. 配置Redis

application.yml中添加Redis的配置信息:

spring:
  redis:
    host: localhost
    port: 6379

3. 创建Redis配置类

创建一个配置类来配置Redis连接工厂和Redis模板。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericToStringSerializer;
 
@Configuration
public class RedisConfig {
 
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }
 
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        template.setValueSerializer(new GenericToStringSerializer<>(Object.class));
        return template;
    }
}

4. 创建商品实体类

创建一个商品实体类,用于表示商品信息。

public class Product {
 
    private String id;
    private String name;
    private int sales;
 
    // getters and setters
}

5. 创建Redis服务类

创建一个服务类,用于与Redis交互

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
 
import java.util.List;
import java.util.Set;
 
@Service
public class ProductService {
 
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
 
    private static final String PRODUCT_RANK_KEY = "product_rank";
 
    public void updateProductSales(String productId, int sales) {
        redisTemplate.opsForZSet().incrementScore(PRODUCT_RANK_KEY, productId, sales);
    }
 
    public Set<Object> getTopProducts(int top) {
        return redisTemplate.opsForZSet().reverseRange(PRODUCT_RANK_KEY, 0, top - 1);
    }
}

6. 创建控制器类

创建一个控制器类,提供API接口用于更新商品销售量和获取排行榜。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.util.Set;
 
@RestController
@RequestMapping("/products")
public class ProductController {
 
    @Autowired
    private ProductService productService;
 
    @PostMapping("/updateSales")
    public void updateSales(@RequestParam String productId, @RequestParam int sales) {
        productService.updateProductSales(productId, sales);
    }
 
    @GetMapping("/top")
    public Set<Object> getTopProducts(@RequestParam int top) {
        return productService.getTopProducts(top);
    }
}

7. 测试功能

运行Spring Boot应用程序,使用以下curl命令测试API接口。

更新商品销售量:

curl -X POST "http://localhost:8080/products/updateSales?productId=1&sales=10"

获取排行榜:

curl -X GET "http://localhost:8080/products/top?top=10"

关键代码解析

Redis配置类

Redis配置类RedisConfig用于配置Redis连接工厂和Redis模板。Lettuce是Spring Data Redis的默认客户端,具有高性能和非阻塞IO的优点。通过设置Redis模板的序列化器,确保Redis中的数据以正确的格式存储和读取。

商品实体类

商品实体类Product包含商品的基本信息,如ID、名称和销售量。通过getters和setters方法,可以轻松获取和设置商品属性。

Redis服务类

Redis服务类ProductService负责与Redis交互。通过RedisTemplate提供的操作,可以方便地更新商品的销售量并获取商品排行榜。


updateProductSales方法:使用incrementScore方法根据商品ID更新商品的销售量。

getTopProducts方法:使用reverseRange方法获取销售量最高的前N个商品。

控制器类

控制器类ProductController提供RESTful API接口,供前端或其他服务调用。


updateSales方法:接收商品ID和销售量参数,调用ProductService的updateProductSales方法更新商品销售量。

getTopProducts方法:接收前N个商品的参数,调用ProductService的getTopProducts方法获取商品排行榜。

通过以上步骤和代码示例,可以成功地在Spring Boot项目中整合Redis,并实现商品排行榜的更新和查询功能。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
相关文章
|
24天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
13天前
|
编解码 NoSQL Java
使用Spring Boot + Redis 队列实现视频文件上传及FFmpeg转码的技术分享
【8月更文挑战第30天】在当前的互联网应用中,视频内容的处理与分发已成为不可或缺的一部分。对于视频平台而言,高效、稳定地处理用户上传的视频文件,并对其进行转码以适应不同设备的播放需求,是提升用户体验的关键。本文将围绕使用Spring Boot结合Redis队列技术来实现视频文件上传及FFmpeg转码的过程,分享一系列技术干货。
49 3
|
24天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
这篇文章介绍了如何在SpringBoot项目中整合Redis,并探讨了缓存穿透、缓存雪崩和缓存击穿的问题以及解决方法。文章还提供了解决缓存击穿问题的加锁示例代码,包括存在问题和问题解决后的版本,并指出了本地锁在分布式情况下的局限性,引出了分布式锁的概念。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
|
24天前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
28天前
|
NoSQL Java Redis
springboot整合redis
这篇文章介绍了如何在Spring Boot中整合Redis,包括搭建Redis环境、添加依赖、创建实体类、控制器以及配置文件,并说明了在连接Redis时需要启动Redis服务。
springboot整合redis
|
21天前
|
Web App开发 前端开发 关系型数据库
基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】
这篇文章介绍了一个基于SpringBoot+Vue+Redis+Mybatis技术栈开发的商城购物系统,包括系统功能、页面展示、前后端项目结构和核心代码,以及如何获取系统源码和答辩PPT的方法。
|
26天前
|
前端开发 数据库
SpringBoot+Vue实现商品不能重复加入购物车、购物车中展示商品的信息、删除商品重点提示等操作。如何点击图片实现图片放大
这篇文章介绍了如何在SpringBoot+Vue框架下实现购物车功能,包括防止商品重复加入、展示商品信息、删除商品时的提示,以及点击图片放大的前端实现。
SpringBoot+Vue实现商品不能重复加入购物车、购物车中展示商品的信息、删除商品重点提示等操作。如何点击图片实现图片放大
|
28天前
|
NoSQL Java Linux
springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务
该博客文章介绍了如何在Spring Boot项目中通过配置和代码实现连接运行在Linux虚拟机上的Redis服务,并提供了详细的步骤和测试结果截图。
springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务
|
14天前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
40 0
|
1月前
|
NoSQL Java Redis
Spring Boot集成Redis全攻略:高效数据存取,打造性能飞跃的Java微服务应用!
【8月更文挑战第3天】Spring Boot是备受欢迎的微服务框架,以其快速开发与轻量特性著称。结合高性能键值数据库Redis,可显著增强应用性能。集成步骤包括:添加`spring-boot-starter-data-redis`依赖,配置Redis服务器参数,注入`RedisTemplate`或`StringRedisTemplate`进行数据操作。这种集成方案适用于缓存、高并发等场景,有效提升数据处理效率。
189 2