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 ...
随机推荐
- Iterable<T>接口
https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html public interface Iterable<T> ...
- Task的取消
原文:.NET 4 并行(多核)编程系列之三 从Task的取消 .NET 4 并行(多核)编程系列之三 从Task的取消 前言:因为Task是.NET 4并行编程最为核心的一个类,也我们在是在并行编程 ...
- luogu题解 P1462 【通往奥格瑞玛的道路】二分+spfa
题目链接: https://www.luogu.org/problemnew/show/P1462 思路: 又是一道水题,很明显二分+最短路 而且这道题数据非常水,spfa有个小错误居然拿了91分还比 ...
- js 数据类型的判断
1. typeof 运算符 typeof 可以判断基本数据类型: typeof 123; // "number" typeof 'abc'; // "string&quo ...
- Docker架构及其三要素
1.Docker架构 a.Docker客户端和服务端 Docker是客户-服务器(C/S)架构的程序.Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并 ...
- Tensorflow模型移植Arm之一:C与Python互相调用
一.C调用Python 1.新建一个Python文件,名称为py_multipy.py: #import numpy as np def multiply(a=1,b=2): print('Funct ...
- centos7搭建activemq服务
一.下载安装jdk 下载 jdk-8u211-linux-x64.rpm安装: yum -y install jdk-8u211-linux-x64.rpm 二.官网下载 activemq 软件包 官 ...
- linux pip使用国内源
最近在Linux里面使用pip安装应用的速度十分的慢,于是便上网找了一些国内的源. 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:https:// ...
- SQL SERVER 2012安装配置说明(多图详解)
1. 优先安装软件 1. net framework3.5. 2. 在安装SQL SERVER 2012前需要3.5的支持.在WIN 2012系统可以在系统管理的添加角色和功能中安装,如下将[.NET ...
- 面试复习题(一)Java系列
(根据自己的理解和根据黑马资料总结—意见不统一我会写上自己的理解) 一.Java面向对象 1.面向对象都有哪些特性以及你对这些特性的理解 继承.封装.多态.(抽象) 2.public,private, ...