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实现商品销量排行榜的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人 知乎碧桂园_万亿负债之下,碧桂园
- 下一篇: php 没有libmysql.dll,P