之前练习做过一个网上商城,采用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实现商品销量排行榜相关推荐

  1. list redis 怎样做排行_Redis排行榜的设计与实现

    后知后觉,前几天做的自以为挺满意的排行榜,不正是zset的经典实现么,现在的思路全都是查库的操作,由于业务原因,有些是异步操作,难免存在已经计分,但分数还没有入库,这时去查库,导致与实际的分数不一致的 ...

  2. list redis 怎样做排行_Redis中5种数据结构的使用场景介绍

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  3. list redis 怎样做排行_redis实现排行榜效果

    现在的互联网应用基本都有排行榜这个功能,现在就用java + redis来实现一下吧. 先看一下效果: 引入依赖 redis.clients jedis 2.7.3 开发思路 1.页面上点击一次购买按 ...

  4. list redis 怎样做排行_学 Redis 的 7000 字小结!!!

    来源:http://rrd.me/ekrCq Redis 简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - va ...

  5. list redis 怎样做排行_list类型的应用场景 —— Redis实战经验

    list类型是简单的字符串列表,按照插入顺序排序.每个列表最多可以存储 232 - 1 个元素(40多亿) ,list类型主要有以下应用场景.. 1. 消息队列 list类型的lpop和rpush(或 ...

  6. redis实现商品销量排行榜

    前言 需要统计某个商家商品的实时销量排行,可以使用SQL语句,根据销量字段排序,但是这个方法需要进行全表扫描,当数据量非常大的时候,效率很低 redis自带的数据结构zset是有序列表,可以结合red ...

  7. magento根据浏览次数为商品做排行

    最近的magento开发真让人不爽,先吐槽一下! 遇到一个问题,想根据前台商品的浏览次数为商品做排行,即为用户提供查看:最多浏览商品 的功能. 核心代码如下: require_once ('app/M ...

  8. php如何防止超发,PHP+redis实现的限制抢购防止商品超发功能详解

    本文实例讲述了php+redis实现的限制抢购防止商品超发功能.分享给大家供大家参考,具体如下: redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用.redis中key的原子自 ...

  9. Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁

    List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...

最新文章

  1. 苏黎世华人博士提出模型SwinIR,只用33%的参数量就碾压图像修复领域sota
  2. CSS3自定义滚动条
  3. python 之GUI设计:messabebox组件
  4. 修改Eclipse自动换行长度
  5. 2018秋季C语言学习总结
  6. 35岁的程序员,真的要转管理吗?
  7. CSS——可视化格式模型
  8. 《Scikit-Learn与TensorFlow机器学习实用指南》第4章 训练模型
  9. 解决zabbix图形乱码
  10. linux ubuntu 获取ip,linux系统(ubuntu)怎么查看ip地址
  11. python毕业设计作品基于django框架 景区购票系统毕设成品(6)开题答辩PPT
  12. Arduino时钟LCD显示
  13. 国产操作系统都有哪些功能?普通人能满足日常使用吗?
  14. 华为认证人工智能工程师 HCIA-AI V3.5(中文版) 发布通知
  15. launcher切页动画
  16. 面对大量的用户数据泄露事件,普通用户该如何保护个人的网络信息安全?
  17. Python小白练习之球弹跳
  18. 反需求函数和边际收益_边际收益和需求价格弹性_微观经济学
  19. 数据中心放入海底?微软开始测试“潜艇式”海底数据中心
  20. 全链路追踪 jaeger

热门文章

  1. nginx的学习(配置文件,以及部署的疑惑)
  2. 数据结构C语言实现—队列操作
  3. 手把手教你实现Java发送邮件(1)-发送简单的文本
  4. 聚类算法 K-Means 简介与入门
  5. 【剑指offer】面试题55 - II:平衡二叉树(Java)
  6. 什么是java dom_java web--DOM
  7. mysql key buffer_mysql 开发进阶篇系列 16 MySQL Server(myisam key_buffer)
  8. 像个字段相减绝对值_遇见你丨像个英雄一样活着 瘫痪作家用手指敲击文字著百万字文学作品...
  9. mysql 8 修改root密码忘记_忘记mysql8或者mariadb5及以上 的root密码如何更改
  10. 算法实现:返回单链表的倒数第pos个节点