redis数据类型之Zset(案例排行榜springboot+rabbitmq+redis)
发布网友
发布时间:2024-10-24 01:07
我来回答
共1个回答
热心网友
时间:2024-10-24 13:57
Redis的有序集合,作为string类型元素的集合,与普通集合相似,但每个元素都关联着一个double类型的分数,用于实现成员的有序排列。尽管集合中的元素是唯一的,但分数可以重复,且有序集合的高效性体现在其哈希表实现上,操作复杂度均为O(1),最大存储量可达40多亿个成员。
在实际场景中,如一个拥有25万用户量的公众号,用户可以为比赛作品点赞。起初,由于未知用户量,采用连表查询导致性能问题,服务挂载。为解决这一问题,开发团队优化了方案,添加了点赞字段实时更新,但在高并发情况下,可能出现点赞数量小于实际记录的情况,这时会定时同步数据。
为了模拟商品点赞和排行榜功能,我们首先在启动类中设置序列化以避免乱码。随机生成1-15个商品ID并存储用户点赞记录。排行榜则是从第0个开始,根据key查询总数进行分页。在测试过程中,发现直接写入Redis的数据存在问题,通过清空数据并测试200个请求,发现点赞数据出现了丢失。
为解决数据丢失,我们引入了RabbitMQ,创建了交换机和队列,并修改了点赞接口。消息消费部分确保了数据的完整性。再次测试后,确认消息没有丢失。最后,排行榜功能得以正常运作。
项目代码可以在Atom/redis zset的GitHub地址中找到。