所以,将ZSet缓存逻辑替换了上述的Set缓存逻辑,也就是更改增删改的Redis下令语句即可实现优化了。
so,利用sortedSet优化后的点赞排行榜实现逻辑变成:
利用range(key,begin,end)即可返回与key对应的value集合中从下标为begin到end的按时间戳排好序的记录,提取其中的userid,即可以查询到user列表返回前端了。
BUT,这么实现有个问题:
返回的用户列表为想要返回的(begin,end)列表的倒序
原因在于:从Redis中查找返回的Zset中的idsList是正确次序的,但是当通过listByIds去数据库中查找对应用户信息时利用了
select icon,nick_name from tb_user where id IN(a,b,c,...)
其中(a,b,c...)原本是正确的次序,但查找的信息结果却是倒序的了
此处若将sql语句修改为
select icon,nick_name from tb_user where id IN(a,b,c,...) ORDER BY FIELD(id,a,b,c,...)
即 指定返回的次序按id指定的次序