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页面上显示:

结果如下图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大学计算机基础python学多久_基于Python 的“大学计算机基础”课程教学设计

基于Python 的“大学计算机基础”课程教学设计 日期&#xff1a;2018-04-11 04:32 摘要 培养非计算机专业大学生的计算思维能力&#xff0c;在“大学计算机基础”课程教学中引入程序设计内容已成各大高校的共识&#xff0c;但选择何种程序设计语言仍然观点不一。本文针对大一新…

android设计招式之美,6 - 设计模式与Android框架设计f

本教程由麦可网录制&#xff0c;共55节&#xff0c;主要介绍的内容有设计模式与Android框架设计、Android框架与应用类别的接合卡榫(Hook)函数、 Template Method模式等&#xff0c;本站提供部分教程在线学习&#xff0c;全套教程请下载观看。完整目录如下&#xff1a;1 - 设计…

treeselect只选了分支节点全选_vue Treeselect 树形下拉框:获取选中节点的ids和lables操作...

API: https://vue-treeselect.js.org/#events1.ids: 即value1.lable: 需要用到方法&#xff1a;select(node,instanceId) 和 deselect(node,instanceId)v-model"DRHA_EFaultModeTree_value":multiple"true":options"DRHA_EFaultModeTree_options"…

java 同步锁_死磕 java同步系列之自己动手写一个锁Lock

问题&#xff08;1&#xff09;自己动手写一个锁需要哪些知识&#xff1f;&#xff08;2&#xff09;自己动手写一个锁到底有多简单&#xff1f;&#xff08;3&#xff09;自己能不能写出来一个完美的锁&#xff1f;简介本篇文章的目标一是自己动手写一个锁&#xff0c;这个锁的…

linux ofstream open,浅谈linux性能调优之十一:内存分配管理

linux下内存分配的管理主要通过内核参数来控制&#xff1a;1.与容量相关的内存可调参数以下参数位于 proc 文件系统的 /proc/sys/vm/ 目录中。overcommit_memory &#xff1a;规定决定是否接受超大内存请求的条件。这个参数有三个可能的值&#xff1a;* 0 — 默认设置。内核执行…

click事件在什么时候出发_剖析setTimeout和click点击事件的触发顺序

下面是一段非常简单的JavaScript代码dianjisetTimeout(function () {alert(timer handler)}, 2000)function test () {document.addEventListener(click, function (e) {alert(click handler)}, false)var startTime new Date()while ((new Date()).getTime() - startTime <…

android里canvas视频帧,移动端用canvas截取视频封面,如何不截取第一帧,而是截取其它的帧?...

我在微信开发工具里截的图是可以的&#xff0c;但是在手机上截的图缺变成全透明的了。我猜是视频的第一帧的问题微信开发工具的截图手机的截图我的代码&#xff1a;JS&#xff1a;function captureImage(video) {var scale1var canvas document.createElement("canvas&qu…

python画正方形内切圆_python画出三角形外接圆和内切圆的方法

刚看了《最强大脑》中英对决&#xff0c;其中难度最大的项目需要选手先脑补泰森多边形&#xff0c;再找出完全相同的两个泰森多边形。在惊呆且感叹自身头脑愚笨的同时&#xff0c;不免手痒想要借助电脑弄个图出来看看&#xff0c;闲来无事吹吹牛也是极好的。 今天先来画画外接圆…

ar面部识别_Blippar公司加入实时面部识别技术 扫脸就能解锁个人AR简介

VR之家消息&#xff1a;近日&#xff0c;AR初创公司Blippar在其应用中加入了实时面部识别技术。据悉&#xff0c;利用这项新技术&#xff0c;用户通过智能手机摄像头扫脸&#xff0c;只要被扫对象已经存在AR简介&#xff0c;就能解锁这个人的个人资料。Blippar公司加入实时面部…

查看地区的ip段_「教程」CloudFlare 自选 IP优化网站速度

前言CloudFlare 官网虽然不提供 CNAME / AAAA / A 记录接入 CloudFlare 的 CDN &#xff0c;但是我们可以通过 CloudFlare Partner 免费使用 CNAME / A 记录接入 CloudFlare 。而我们正好利用 CloudFlare 使用 A 记录接入 CDN 的方式&#xff0c;自定义节点 IP &#xff0c;例如…

android手机可以设置屏幕锁定,安卓手机屏幕锁设置方法(九个点图案)

这里以三星S5368手机屏幕锁为例随着三星S5368手机系统功能愈来愈完善&#xff0c;性能愈来愈强劲&#xff0c;越来越多的三星S5368用户们都喜欢把一些重要的信息甚至隐私放在三星S5368手机里面&#xff0c;但是这就有可能会让别人看到&#xff0c;这样一来你的三星S5368里面的信…

python win10 连接hive_使用win10+python3.5+impyla 连接大数据平台hive表的步骤与问题解决...

环境硬件配置及Hadoop&#xff0c;Hive版本一、安装步骤pip install pure-saslDownloading https://pypi.tuna.tsinghua.edu.cn/packages/16/83/30eaf3765de898083 75a8358f9c15d45a3dd44ed26be991471abc0b4480b/pure_sasl-0.5.1-py2.py3-none-any.whlpip install thrift_sasl0…

python将excel表按地方拆分_Python将一个Excel拆分为多个Excel

本文实例为大家分享了Python将一个Excel拆分为多个Excel的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 原始文档如下图所示将销售部门一、二、三科分别存为三个Excel 代码如下 # -*- coding: utf-8 -*- """ Created on Mon Jul 9 20:25:31 2018 au…

arduino麦轮转弯程序_麦克纳姆轮智能小车接线方案

折腾了好几天&#xff0c;实在搞不定了&#xff0c;决定上来社区求助。现在的硬件情况是这样的&#xff1a;- HM-GM37-3429霍尔传感器大载重电机&#xff0c;每个电机六条线&#xff0c;其中电机输入两个&#xff0c;霍尔编码器电源两个&#xff0c;编码器AB相两个- 四个电机&a…

python中range 函数_pythonrange,range函数的用法

当range()函数内填入第三个参数时&#xff0c;第三个参数表示百步长。函数语法&#xff1a;range(start,stop[,step])参数说明&#xff1a;start:计数从度start开始。默认是从0开始。例知如道range&#xff08;5&#xff09;回等价于range&#xff08;0&#xff0c;5&#xff0…

xss植入_网站xss漏洞的利用过程

XSS跨站脚本&#xff0c;是一种Web安全漏洞&#xff0c;有趣是是他并不像SQL注入等攻击手段攻击服务端&#xff0c;本身对Web服务器没有危害&#xff0c;攻击的对象是客户端&#xff0c;使用浏览器访问这些恶意地址的网民。这里就跟大家稍微讲解一下网站xss漏洞的利用过程。网站…

html制作状态栏数字时钟,html5 canvas制作15种数字时钟样式代码

特效描述&#xff1a;html5 canvas制作 数字时钟样式。html5 canvas数字时钟代码代码结构1. 引入CSS2. 引入JS3. HTML代码clockd1_{"indicate": true,"indicate_color": "#222","dial1_color": "#666600","dial2_color…

python出现的次数最多的元素_【Python 秘籍】序列中出现次数最多的元素

问题 怎样找出一个序列中出现次数最多的元素呢&#xff1f; 解决方案 collections.Counter 类就是专门为这类问题而设计的&#xff0c; 它甚至有一个有用的 most_common() 方法直接给了你答案。 为了演示&#xff0c;先假设你有一个单词列表并且想找出哪个单词出现频率最高。你…

华为申请注册鸿蒙商标,华为申请“鸿蒙商标”,企业注册商标有什么价值?

原标题&#xff1a;华为申请“鸿蒙商标”&#xff0c;企业注册商标有什么价值&#xff1f;国家知识产权局商标局网站显示&#xff0c;华为已申请“华为鸿蒙”商标。申请日期为2018年8月24日&#xff0c;注册公告日期为2019年5月14日&#xff0c;专用权限期是从2019年5月14日到2…

dabs是什么意思_cpdd是什么意思(网络语cpdd是什么梗啥意思)

随着网络的快速发展&#xff0c;抖音和微博这样的软件也是越来越火&#xff0c;因此很多流行语就随之诞生&#xff0c;特别是在抖音里&#xff0c;经常看到游戏相关的用语&#xff0c;比如桃酥和阿姨打LOL时候&#xff0c;就出现了很多高校的流行语&#xff0c;其中“cpdd”这个…