使用Redis 对问题下的回答按点赞数排序的思路;

1根据问题id查出所有的回答列表;
2吧回答的ids添加到zset1中; key为id,value为赞的数量;(用于点赞排行);
//批量添加 Long add(K var1, Set<ZSetOperations.TypedTuple<V>> var2);
2-2吧回答的ids添加到zset2中;key为id,value为createTime.getLong();(用于创建时间排行);
3对回答进行点赞(取消)的时候
更改zset1中的指定key的value加减1;
4-1发表回答的时候zset1,zset2中增加元素,
 //redisTemplate.opsForZSet().add(key,4565L,13);
4-2删除的时候移除元素;
//redisTemplate.opsForZSet().remove(key,4565L)
5获取排序后的分页数据;结果为回答的ids;
6迭代ids 去每个回答的id对应素材的缓存中取出对象;
    @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种方式的更多相关文章

  1. 目录和文件 按创建时间排序du -h --time --max-depth=1 . |sort -r -t $&#39;\t&#39; -k 2 Linux查看文件夹大小,并按文件夹创建时间排序

    目录和文件 按创建时间排序 # du -h --time --max-depth=1 . |sort -r -t $'\t' -k 230M 2020-04-01 14:54 .28K 2020-04 ...

  2. Linux中ls对文件进行按大小排序和按时间排序,设置ls时间格式

    1 按文件大小排序 使用 ll -S | grep '^[^d]' // 格式化文件大小形式 ll -Sh | grep '^[^d]' 2 按文件修改时间排序显示 使用 ll -rt 3 设置ls ...

  3. &quot;《算法导论》之‘排序’&quot;:线性时间排序

    本文参考自一博文与<算法导论>. <算法导论>之前介绍了合并排序.堆排序和快速排序的特点及运行时间.合并排序和堆排序在最坏情况下达到O(nlgn),而快速排序最坏情况下达到O( ...

  4. git branch 分支创建时间排序

    git branch日期排序 vi ~/.gitconfig [alias]lb = !"for k in `git branch -a|perl -pe s/^..//`;do echo ...

  5. Mysql数据库里面的String类型依照数字来排序以及按时间排序的sql语句

    今天做项目的时候,遇到个小小的问题,在数据库中查询的时候,要用String类型的ID进行一下排序!(注:ID字段为 varchar 类型) 解决的方法: 如: SELECT * FROM  Stude ...

  6. ls按时间排序输出文件列表

    文件转自:http://www.2cto.com/os/201303/197829.html ls按时间排序输出文件列表   首先,ls --help查看ls相关的与时间排序相关的参数:   > ...

  7. Java汉字排序(2)按拼音排序

    对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画. 本文就讲述如何实现按拼音排序的比较器(Comparator). 作者:Jeff 发表于:2007年12月21日 11:27 最 ...

  8. LINUX的文件按时间排序

    转载 2014年12月29日 00:49:23 20298 > ls -alt # 按修改时间排序 > ls --sort=time -la # 等价于> ls -alt > ...

  9. 【linux】的文件按时间排序

    > ls -alt # 按修改时间排序 > ls --sort=time -la # 等价于> ls -alt > ls -alc # 按创建时间排序 > ls -alu ...

随机推荐

  1. 在iis7上如何配置来看到asp报错

    今天网站改版时碰到一个问题,客户要求老网站的地图等功能要保持,但是老网站是用asp开发的.我们可以直接利用老的数据库以及老的代码,但是部署到新的服务器上一直报错. 刚开始是404,后来是500...今 ...

  2. Python基础(二),Day2

    常用的数据类型 int 整型 float 浮点 bool 布尔 string 字符串 列表的语法和用法 # 创建一个列表 list = [] #一个空列表 list = ['2323123','asd ...

  3. Box Anemometer

    https://sourceforge.net/projects/pydev/files/pydev/ Eclipse + Pydev 配置Python开发环境 JDK安装http://jingyan ...

  4. 黄聪:使用$.getJSON解决ajax跨域访问 JQuery 的跨域方法(服务器端为wordpress程序)

    客户端: <input id="cat" name="cat" type="hidden" value="<? ech ...

  5. 【Linux安全】防止任意用户使用 su 切换到 root

    防止任意用户使用 su 切换到 root 在终端中输入下列命令 vim /etc/pam.d/su (按 i 进行编辑,qw 保存并推出) 在头部加入行: auth required pam_whee ...

  6. 安卓demo

    https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-CN.md

  7. MyEclipse 配置 Tomcat

    安装好Tomcat,MyEclipse 之后,利用这两个工具可以开发部署Web 应用,步骤相对手动部署要简洁的多,这里有一个特别要注意的地方:系统里安装JDK.Tomcat.MyEclipse 的版本 ...

  8. LwIP协议栈规范翻译——摘要目录

    摘要 LwIP是一种TCP/IP协议栈的实现.LwIP协议栈专注于减少内存的使用和代码的大小,使LwIP适用于嵌入式系统中在有限的资源下能够使用小型的客户机.为了减少处理和内存的需求,LwIP使用裁剪 ...

  9. 腾讯云服务器突然远程连不上(包含ssh,拒绝访问)

    版权声明:本文转载自  https://blog.csdn.net/Alexwu555/article/details/78448113, 暂时这样 , 以后再来整理.不太习惯不能直接贴截图啊 配置安 ...

  10. 设计模式-观察者模式(Observer Pattern)

    观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...