最近接到一个需求,用户可以进行某种设计,然后发表收取点赞,需要做排行榜,基本需求如下
(1)排行榜按照点赞数量倒序排列,分页获取,每页20条
(2)用户可以点赞和取消点赞,需要记录用户和记录的点赞关系(已点赞/未点赞)
(3)排行榜和点赞数量会很大,假设排行榜有1万条数据,每条数据又1万个点赞,总共1亿条数据
然后有了如下设想
(1)用redis有序集合保存排行榜,分数就是设计的点赞数
分页获取排行榜和点赞数:【ZREVRANGE key start stop WITHSCORES】获取排行榜就用分数倒序排列,获取start到top条数据,可以满足分页需求
获取排行榜设计总数:【zcard key】
新增设计到排行榜:【ZADD key scroe member 】加入设计id和对应的点赞数(默认为0)到排行榜有序集合中
从排行榜删除设计:【ZREM key member1】从排行榜有序集合中删除设计id
点赞和取消点赞操作:【ZINCREBY key increment member】ZINCRBY命令可以增加一个元素的分数,当分数为负数时,表示减分,返回值是更改后的分数
(2)用redis集合保存设计点赞人
点赞操作:【SADD key member 】加入用户的手机唯一标识(或者用户id)到set中
取消点赞操作:【SREM key member 】从set中删除用户的手机唯一标识(或者用户id)
判断用户是否进行过点赞:【SISMEMBER key member】判断用户手机唯一标识(或者用户id)是否在集合中