标签:cti val list() nts mil 迭代 override 别人 oid
使用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种方式
标签:cti val list() nts mil 迭代 override 别人 oid
原文地址:https://www.cnblogs.com/zhuyeshen/p/11433857.html