Redis实现微博热度前100
怎么实现?
大key问题
微博数量很多,如果都放在一个key,那就会产生大key问题。可以把一个key拆分成多个key,比如100个key,每个key只存储一部分微博。然后用一个汇总的key保存排名前N的数据 1)这100个key还是保存在一个Redis中。以lua脚本的方式执行下面的命令
// 写操作 zincrby key_{ 1-100} increment score; zincrby key_sort_{ N} increment score; // 如果已经包含N个元素,删除最小的一个 if(zcard key_sort_{ N}>N){ zremrangebyrank key_sort_{ N} 0 0; }
// 读操作 zrevrange key_sort_{ N} 0 -1 WITHSCORES
// lua脚本执行下面2条命令 zincrby key_sort_{ N} increment score; // 如果已经包含N个元素,删除最小的一个 if(zcard key_sort_{ N}>N){ zremrangebyrank key_sort_{ N} 0 0; }
允许有时候异步线程更新汇总key失败,总不会每次都失败。查询排行前N同上。
拓展
上一篇:
微信小程序ssm电影院售票系统app
下一篇:
基于SSM的商城项目项目源码+实验报告