推模型的缺点:假设某大v有1亿粉丝,则他发一条微博要推送给1亿个对应list,性能上难以承受的。有些用户可能还很久不登陆,又会造成了浪费。所以微博早期是推模型,后来改为了拉!


方法1(将要推送的内容写入list):


发微薄,维持若干个(这个数小于或等于所有用户数)list,比如维持list为500个长度:

image.png

(查出当前用户的所有粉丝,并循环将自己发的微博推到每个粉丝所属的推送列表里)

可以做个判断,llen key如果大于等于500,则ltrim key 0 499。其中这个list的长度写在配置文件里,动态调用。

同时也可以将发布当前微博的时间也写到recivepost里面,用"#"等隔开,方便一次性输出在页面上。也可以将其写入hash结构。

注意:还要将自己发的推给自己所属的推送列表里

取微博:image.png循环输出:

image.png

翻页可以用:

lrange key start  stop

作用: 返回链表中[start ,stop]中的元素

规律: 左数从0开始,右数从-1开始(0  -1 选取所有元素)




方法2(将要推送的内容写入hash):

发微博:

image.png

image.png

(将username也放进来(冗余),避免再次根据userid查询username)

取微博:

image.png

循环输出到页面:

image.png


注意:显示多久前发布,这个时间应该交给前端来算,尽量减少服务器的负担