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同上。

拓展

经验分享 程序员 微信小程序 职场和发展