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并发编程-多线程实现服务端并发-GIL全局解释器锁-验证python多线程是否有用-死锁-递归锁-信号量-Event事件-线程结合队列-03
目录 结合多线程实现服务端并发(不用socketserver模块) 服务端代码 客户端代码 CIL全局解释器锁****** 可能被问到的两个判断 与普通互斥锁的区别 验证python的多线程是否有用需 ...
- Python验证码登录(Tesseract安装配置)
1.安装py库:pytesseract,PIL pip install pytesseract pip install PILLOW 如果安装时,出现权限不足: pip install --user ...
- Python爬虫 Selenium与PhantomJS
Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Sele ...
- vue路由(基于VScode开发)
index.js如果在router目录下,代表这个js文件只是路由使用 main.js中为全局,需要引入使用到的组件,一般vue中不用写东西vue中el挂载哪个就哪个组件为根目录,传值数据绑定的时候在 ...
- mysql 5.7.24 root密码重置
sudo mysql -u root -p 初始root密码没有,直接按回车 show databases: use mysql; update user set authentication_str ...
- Golang中的匿名函数(闭包)
GO语言的匿名函数就是闭包,以下是<GO语言编程>中对闭包的解释 基本概念闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代 ...
- Hive Server2(五)
HiveServer2 基本概念介绍 1.HiveServer2基本介绍 HiveServer2 (HS2) is a server interface that enables remote cli ...
- ImportError: attempted relative import with no known parent package
或者检查所导包是否存在__init__.py文件,没有则添加上即可使当前文件夹变为包.
- Iview 在Table组件中添加图片
要先简单了解render函数的使用. 直接上代码: { title: "商品图片", key: "commodityPhoto", align: 'center ...
- grunt的安装及使用
windows下安装grunt需要先安装ruby和nodejsruby -v 测试ruby是否安装成功node -v 测试nodejs是否安装成功npm -v 测试npm是否安装成功(npm是node ...