产品需求:
1.对一个feed的撒花操作每人只能一次
2.撒花可以撤销
3.撒花结果需要展示,按照时间排序,最近撒花记录放在最先
4.要显示撒花数量,是否撒过花
之前这种逻辑用mc实现,真是麻烦,无法满足既有时间轴排序又要快速查找的需求,现在新产品中直接采用redis,而具备这两种特性的数据结构就是有序集合
下面具体来说一下用sort set怎样实现撒花的各种需求:
1. 查询是否已撒花
操作:ZRANK prise_record uid
结果:返回nil表示没有撒过花,返回>=0,表示已经撒过
2.撒花
操作:ZADD prise_record time_now uid
结果:>0,表示添加成功
3.撤销撒花
操作:ZREM prise_record uid
结果:>0,删除成功
4.展示撒花记录
操作:ZREVRANGE prise_record 0 count
结果:按照时间顺序返回结果,最近的记录排在最前
5.撒花数量
操作:ZCOUNT prise_record start_time end_time
结果:返回时间段内的记录数量