上一篇写了 Redis
的 hash
实现购物车,Redis
其他的数据类型也很好用。比如说 zset
,zset
每个元素都会关联一个score
,由于 score
这个特殊的存在,它可以用在任何与排序有关的场景,如 排行榜
、热搜商品
等等
[TOC]
zset
介绍
zset
类似 set
,但它的每一个元素都关联一个叫 score
的浮点数值; zset
可以通过 score
进行排序(包括正序和倒序)。我们可以通过对指定元素的score
进行修改来改变该元素的排名。zset
的成员是唯一的,但 score
(分数)可以重复。
zset
的命令很多,这篇用到了两个 zincrby
、zrevrange
。
Redis 命令 |
Spring Data Redis | 描述 |
---|---|---|
zincrby key increment member |
Double incrementScore(K key, V value, double delta) |
给指定元素的 score 加delta |
zrevrange key max min [WITHSCORES] [LIMIT offset count] |
Set<V> reverseRangeByScore(K key, double min, double max, long offset, long count) |
从表头到表尾遍历 ziplist 或 skiplist ,返回给定索引范围内的元素 |
编码
zset
的底层编码是ziplist
或 skiplist
当有序集合对象可以同时满足以下两个条件时,对象使用 ziplist
编码:
- 有序集合保存的元素数量小于 128 个;
- 有序集合保存的所有元素成员的长度都小于 64 位。
不能同时满足上面两个条件则使用 skiplist
编码。当 zset
使用 skiplist
编码时,zset
对象包含一个字典(dict)
和一个跳跃表(skiplist)
。
环境/版本一览:
- 开发工具:Intellij IDEA 2019.1.3
- springboot: 2.1.7.RELEASE
- jdk:1.8.0_171
- maven:3.3.9
- mybatis-plus:3.1.2
- mysql-connector-java:5.1.47
1、pom.xml
1 | <dependencies> |
2、application.yml
1 | spring: |
3、sql
1 | CREATE DATABASE /*!32312 IF NOT EXISTS*/`chapter30` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */; |
4、common
constants
1 | package com.fatal.common.constants; |
enums
1 | package com.fatal.common.enums; |
5、config
1 | package com.fatal.config; |
6、entity
1 | package com.fatal.entity; |
7、dto
1 | package com.fatal.dto; |
8、mapper
1 | package com.fatal.mapper; |
9、service
IGoodsService.java
1 | package com.fatal.service; |
IHotSearchService.java
1 | package com.fatal.service; |
GoodsServiceImpl.java
1 | package com.fatal.service.impl; |
HotSearchServiceImpl.java
1 | package com.fatal.service.impl; |
10、Test
GoodsMapperTest.java
1 | package com.fatal.mapper; |
IGoodsServiceTest.java
1 | package com.fatal.service; |
IHotSearchServiceTest.java
1 | package com.fatal.service; |
11、测试
测试整合 MP
运行 IGoodsServiceTest.selectListTest()
测试查看商品详情
初始化数据
运行 IHotSearchServiceTest.init()
查看商品详情,商品热搜度 +1
运行 IGoodsServiceTest.getDetails()
控制台正常
Redis
视图化界面
测试查看热搜商品列表
由于测试数据较少,所以我设置了 TOP 数量为 4
不带 score
运行 IHotSearchServiceTest.hotSearchListTest()
控制台
带 score
运行 IHotSearchServiceTest.hotSearchWithScoreListTest()
控制台
参考资料
总结
SpringBoot
的知识已经有前辈在我们之前探索了。比较喜欢的博主有:唐亚峰 | Battcn、方志朋的专栏、程序猿DD、纯洁的微笑。对这门技术感兴趣的可以去他们的博客逛逛。谢谢他们的分享~~
以上文章是我用来学习的Demo
,都是基于 SpringBoot2.x
版本。
源码地址: https://github.com/ynfatal/springboot2-learning/tree/master/chapter30