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实现商品销量排行榜相关推荐
- list redis 怎样做排行_Redis排行榜的设计与实现
后知后觉,前几天做的自以为挺满意的排行榜,不正是zset的经典实现么,现在的思路全都是查库的操作,由于业务原因,有些是异步操作,难免存在已经计分,但分数还没有入库,这时去查库,导致与实际的分数不一致的 ...
- list redis 怎样做排行_Redis中5种数据结构的使用场景介绍
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- list redis 怎样做排行_redis实现排行榜效果
现在的互联网应用基本都有排行榜这个功能,现在就用java + redis来实现一下吧. 先看一下效果: 引入依赖 redis.clients jedis 2.7.3 开发思路 1.页面上点击一次购买按 ...
- list redis 怎样做排行_学 Redis 的 7000 字小结!!!
来源:http://rrd.me/ekrCq Redis 简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - va ...
- list redis 怎样做排行_list类型的应用场景 —— Redis实战经验
list类型是简单的字符串列表,按照插入顺序排序.每个列表最多可以存储 232 - 1 个元素(40多亿) ,list类型主要有以下应用场景.. 1. 消息队列 list类型的lpop和rpush(或 ...
- redis实现商品销量排行榜
前言 需要统计某个商家商品的实时销量排行,可以使用SQL语句,根据销量字段排序,但是这个方法需要进行全表扫描,当数据量非常大的时候,效率很低 redis自带的数据结构zset是有序列表,可以结合red ...
- magento根据浏览次数为商品做排行
最近的magento开发真让人不爽,先吐槽一下! 遇到一个问题,想根据前台商品的浏览次数为商品做排行,即为用户提供查看:最多浏览商品 的功能. 核心代码如下: require_once ('app/M ...
- php如何防止超发,PHP+redis实现的限制抢购防止商品超发功能详解
本文实例讲述了php+redis实现的限制抢购防止商品超发功能.分享给大家供大家参考,具体如下: redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用.redis中key的原子自 ...
- Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁
List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...
最新文章
- 苏黎世华人博士提出模型SwinIR,只用33%的参数量就碾压图像修复领域sota
- CSS3自定义滚动条
- python 之GUI设计:messabebox组件
- 修改Eclipse自动换行长度
- 2018秋季C语言学习总结
- 35岁的程序员,真的要转管理吗?
- CSS——可视化格式模型
- 《Scikit-Learn与TensorFlow机器学习实用指南》第4章 训练模型
- 解决zabbix图形乱码
- linux ubuntu 获取ip,linux系统(ubuntu)怎么查看ip地址
- python毕业设计作品基于django框架 景区购票系统毕设成品(6)开题答辩PPT
- Arduino时钟LCD显示
- 国产操作系统都有哪些功能?普通人能满足日常使用吗?
- 华为认证人工智能工程师 HCIA-AI V3.5(中文版) 发布通知
- launcher切页动画
- 面对大量的用户数据泄露事件,普通用户该如何保护个人的网络信息安全?
- Python小白练习之球弹跳
- 反需求函数和边际收益_边际收益和需求价格弹性_微观经济学
- 数据中心放入海底?微软开始测试“潜艇式”海底数据中心
- 全链路追踪 jaeger
热门文章
- nginx的学习(配置文件,以及部署的疑惑)
- 数据结构C语言实现—队列操作
- 手把手教你实现Java发送邮件(1)-发送简单的文本
- 聚类算法 K-Means 简介与入门
- 【剑指offer】面试题55 - II:平衡二叉树(Java)
- 什么是java dom_java web--DOM
- mysql key buffer_mysql 开发进阶篇系列 16 MySQL Server(myisam key_buffer)
- 像个字段相减绝对值_遇见你丨像个英雄一样活着 瘫痪作家用手指敲击文字著百万字文学作品...
- mysql 8 修改root密码忘记_忘记mysql8或者mariadb5及以上 的root密码如何更改
- 算法实现:返回单链表的倒数第pos个节点