RedisTemplate zSet的使用, 根据点赞排序,和创建时间排序2种方式
使用Redis 对问题下的回答按点赞数排序的思路;
@Test
public void test2(){
String key = "mls_AnswerIdsByQuersionId:"+123;
redisTemplate.opsForZSet().add(key,234L,5); //添加单条 redisTemplate.opsForZSet().add(key,4565L,13); redisTemplate.opsForZSet().add(key,2345L,15); Set<ZSetOperations.TypedTuple<Long>> var2 = new HashSet<>();
ZSetOperations.TypedTuple<Long> answerVoInZset1 = new AnswerVoInZset(2345L, 12);
ZSetOperations.TypedTuple<Long> answerVoInZset2 = new AnswerVoInZset(5675L, 16);
ZSetOperations.TypedTuple<Long> answerVoInZset4 = new AnswerVoInZset(4565L, 11);
var2.add(answerVoInZset1);
var2.add(answerVoInZset2);
var2.add(answerVoInZset4);
redisTempalte.opsForZSet().add(key, var2);//批量添加
redisTemplate.opsForZSet().remove(key,4565L); //移除单个元素 Set<Long> longs = redisTempalte.opsForZSet().reverseRange(key, 0, 3);
}
//用于批量添加的对象; class AnswerVoInZset implements ZSetOperations.TypedTuple<Long>{
Long id;
double score;
public AnswerVoInZset(Long id, double score) {
this.id = id;
this.score = score;
}
@Override
public Long getValue() {
return id;
}
@Override
public Double getScore() {
return score;
}
@Override
public int compareTo(ZSetOperations.TypedTuple<Long> o) {
AnswerVoInZset o1 = (AnswerVoInZset) o;
return new Double(this.score).compareTo(o1.getScore());
}
}
//时间排序;(参考别人的)
@Resource(name = "redisTemplate")
private RedisTemplate<String, Long> redisTempalte; public void addRecentBrowsingPosition(long userId, long positionId) {
String key = "mls_AnswerIdsByQuersionId:" + 123;
// 获取已缓存的最近浏览的职位
ZSetOperations<String, Long> zSetOperations = redisTempalte.opsForZSet();
// zset内部是按分数来排序的,这里用当前时间做分数
zSetOperations.add(key, positionId, System.currentTimeMillis());
// 环形结构--4,-3,-2,-1,0,1,2,3,4
zSetOperations.removeRange(key, 0, -6);
} public List<Long> getRecentBrowsingPositionIds(long userId) {
if (userId <= 0) {
return Collections.emptyList();
}
// 获取用户最近浏览的职位id
String key = "mls_AnswerIdsByQuersionId:" + 123;
Set<Long> positionIds = redisTempalte.opsForZSet().reverseRange(key, 0, 4);
return new ArrayList<>(positionIds);
}
RedisTemplate zSet的使用, 根据点赞排序,和创建时间排序2种方式的更多相关文章
- 目录和文件 按创建时间排序du -h --time --max-depth=1 . |sort -r -t $'\t' -k 2 Linux查看文件夹大小,并按文件夹创建时间排序
目录和文件 按创建时间排序 # du -h --time --max-depth=1 . |sort -r -t $'\t' -k 230M 2020-04-01 14:54 .28K 2020-04 ...
- Linux中ls对文件进行按大小排序和按时间排序,设置ls时间格式
1 按文件大小排序 使用 ll -S | grep '^[^d]' // 格式化文件大小形式 ll -Sh | grep '^[^d]' 2 按文件修改时间排序显示 使用 ll -rt 3 设置ls ...
- "《算法导论》之‘排序’":线性时间排序
本文参考自一博文与<算法导论>. <算法导论>之前介绍了合并排序.堆排序和快速排序的特点及运行时间.合并排序和堆排序在最坏情况下达到O(nlgn),而快速排序最坏情况下达到O( ...
- git branch 分支创建时间排序
git branch日期排序 vi ~/.gitconfig [alias]lb = !"for k in `git branch -a|perl -pe s/^..//`;do echo ...
- Mysql数据库里面的String类型依照数字来排序以及按时间排序的sql语句
今天做项目的时候,遇到个小小的问题,在数据库中查询的时候,要用String类型的ID进行一下排序!(注:ID字段为 varchar 类型) 解决的方法: 如: SELECT * FROM Stude ...
- ls按时间排序输出文件列表
文件转自:http://www.2cto.com/os/201303/197829.html ls按时间排序输出文件列表 首先,ls --help查看ls相关的与时间排序相关的参数: > ...
- Java汉字排序(2)按拼音排序
对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画. 本文就讲述如何实现按拼音排序的比较器(Comparator). 作者:Jeff 发表于:2007年12月21日 11:27 最 ...
- LINUX的文件按时间排序
转载 2014年12月29日 00:49:23 20298 > ls -alt # 按修改时间排序 > ls --sort=time -la # 等价于> ls -alt > ...
- 【linux】的文件按时间排序
> ls -alt # 按修改时间排序 > ls --sort=time -la # 等价于> ls -alt > ls -alc # 按创建时间排序 > ls -alu ...
随机推荐
- 从入门到自闭之Python三大器--生成器
1.什么是生成器 核心:生成器的本质就是一个迭代器 迭代器是python自带的的 生成器是程序员自己写的一种迭代器 编写方式: 基于函数编写 推导式编写 def func (): print(&quo ...
- spark教程(13)-shuffle介绍
shuffle 简介 shuffle 描述了数据从 map task 输出到 reduce task 输入的过程,shuffle 是连接 map 和 reduce 的桥梁: shuffle 性能的高低 ...
- solr学习笔记-入门
solr学习笔记 1.安装前准备 solr依赖java 8 运行环境,所以我们先安装java.如果没有java环境无法启动solr服务,并且会看到如下提示: [root@localhost solr- ...
- 使用openresty实现按照流量百分比控制的灰度分流控制
安装好以后直接就可以配置实践了,openresty将lua都集成好了,nginx配置文件无需特殊声明引入lua file. 1.nginx.conf 添加两个灰度发布的环境 #grey 灰度环境地址 ...
- node工具之node-ip
node-ip node.js用来获取id地址的工具 use var ip = require('ip'); ip.address() // my ip address ip.isEqual('::1 ...
- ELK视频下载
Elasticsearch , Logstash, Kibana 相关视频下载地址:Beats.Elastic Stack.ElasticSearch.Kibana.Logstash下载地址:链接:h ...
- 详解Wox
Wox 是一款国产开源免费的软件快捷启动工具,它可以快速搜索并打开你电脑上的程序.文件.或是查词翻译.网站查找等其他操作,同时还支持插件安装. Tips: 如果你需要用到文件的快速搜索.打开功能,需要 ...
- jquery简单实现表格隔行变色
小知识点:odd的过滤选择器大的使用 html代码: <table> <tr> <td>用户名</td> <td>年龄</td> ...
- 特产网站自适应CSS
下面是一个特产网站自适应CSS,这个特产自适应CSS通过屏幕宽度大小来进行适应的,而不是根据UA来判断,就加快了判断的速度,所以速度很快 中国特产站排名还是很好的,特别是手机端 li { list-s ...
- 深入简出mysql--第一部分
第二章: 1.sql分类 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义. 常用的语句关键字主要包括 ...