欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

list redis 怎样做排行_redis实现商品销量排行榜

发布时间:2024/7/23 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 list redis 怎样做排行_redis实现商品销量排行榜 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

之前练习做过一个网上商城,采用SSM框架实现。该项目有一个商品排行榜模块没有实现,决定采用springboot+dubbo+redis实现该模块。

1.新建springboot项目。

本项目的springboot版本号为:

org.springframework.boot

spring-boot-starter-parent

2.1.6.RELEASE

引入dubbo及redis起始依赖。

com.alibaba.boot

dubbo-spring-boot-starter

0.2.0

org.springframework.boot

spring-boot-starter-data-redis

2.application.properties中配置如下信息

dubbo.application.name = baba-product-rank

dubbo.registry.address=127.0.0.1:2181 #zookeeper地址及端口号

dubbo.registry.protocol=zookeeper

dubbo.protocol.name=dubbo

dubbo.protocol.port=20881

#配置redis服务器

spring.redis.host=192.168.1.109 #redis服务器地址

spring.redis.port=6379

3.创建ProductRank类,并实现序列化

importjava.io.Serializable;public class ProductRank implementsSerializable {privateString productId;privateString productName;privateString price;privateString imgUrl;publicString getProductId() {returnproductId;

}public voidsetProductId(String productId) {this.productId =productId;

}publicString getProductName() {returnproductName;

}public voidsetProductName(String productName) {this.productName =productName;

}publicString getPrice() {returnprice;

}public voidsetPrice(String price) {this.price =price;

}publicString getImgUrl() {returnimgUrl;

}public voidsetImgUrl(String imgUrl) {this.imgUrl =imgUrl;

}

}

4.新建service接口,创建该service与ProductRank类时应注意类路径与之前项目路径一致(dubbo引用服务时要求)。

importcn.itcast.core.bean.ProductRank;importjava.util.List;importjava.util.Set;public interfaceProductRankService {//若没有该数据记录则添加该数据以及score 若有则直接给score加count

public void zSetAdd(ProductRank productRank, doublecount);

//获取(end-begin)个记录的排名public ListgetSetRank(Long begin, Long end);

}

5.创建redisconfg类,用来向容器中注入redisTemplate以及zSetOperations。

importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.core.ZSetOperations;importorg.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.StringRedisSerializer;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.ObjectMapper;

@Configurationpublic classRedisConfig {

@Bean

@SuppressWarnings("all")public RedisTemplateredisTemplate(RedisConnectionFactory factory) {

RedisTemplate template = new RedisTemplate();

template.setConnectionFactory(factory);

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer= new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper om= newObjectMapper();

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(om);

StringRedisSerializer stringRedisSerializer= newStringRedisSerializer();//key采用String的序列化方式

template.setKeySerializer(stringRedisSerializer);//hash的key也采用String的序列化方式

template.setHashKeySerializer(stringRedisSerializer);//value序列化方式采用jackson

template.setValueSerializer(jackson2JsonRedisSerializer);//hash的value序列化方式采用jackson

template.setHashValueSerializer(jackson2JsonRedisSerializer);

template.afterPropertiesSet();returntemplate;

}

@Beanpublic ZSetOperations zSetOperations(RedisTemplateredisTemplate) {returnredisTemplate.opsForZSet();

}

}

6.创建serviceimpl实现类。

importcn.itcast.core.bean.ProductRank;importcom.alibaba.dubbo.config.annotation.Service;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.core.ZSetOperations;importorg.springframework.stereotype.Component;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importjava.util.Set;

@Service //暴露服务

@Componentpublic class ProductRankServiceImpl implementsProductRankService{

@AutowiredprivateRedisTemplate redisTemplate;

@Autowiredprivate ZSetOperationszSetOperations;

@Overridepublic void zSetAdd(ProductRank productRank,doublecount) {

String sortSetName= "product:rank";

zSetOperations.incrementScore(sortSetName,productRank,count);

}

@Overridepublic ListgetSetRank(Long begin, Long end) {

List list = new ArrayList<>();

String sortSetName= "product:rank";

Set set=zSetOperations.reverseRange(sortSetName,begin,end);

Iterator it=set.iterator();while(it.hasNext()){

ProductRank p=(ProductRank)it.next();

list.add(p);

}returnlist;

}

}

7.起始类上添加@EnableDubbo注解

@EnableDubbo

@SpringBootApplicationpublic classBabaProductRankApplication {public static voidmain(String[] args) {

SpringApplication.run(BabaProductRankApplication.class, args);

}

}

8.在网上商城项目中引入dubbo依赖

com.alibaba

dubbo

2.6.2

org.apache.curator

curator-framework

2.12.0

9.在与新建springboot项目中相同路径下复制service接口类与ProductRank类。

                                                      

如图所示。

10.创建consumer.xml配置文件,引用服务。

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd

http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd

http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

11.使用注解注入,并调用,向redis中插入数据。

使用redis-manager软件,查看向redis中添加的数据,如图。

12.调用redis中的数据并显示在页面上。

在jsp页面上显示:

结果如下图。

总结

以上是生活随笔为你收集整理的list redis 怎样做排行_redis实现商品销量排行榜的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。