Redis应用技术(3)List和Set在Feed流中的选择

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在数据推送的时候,我们使用Feed流

Feed流有三种推送数据的方式(以微博订阅为例)

        1.推模式(Push)

                将数据在发出后直接推到每个收件箱中.这样会造成发送方的内存占用很大  

         2.拉模式

                       用户每次登录后主动的将数据从收件箱中拉去到,会造成用户的负载增加(如果关注的人很多,甚至会导致上千万条数据的情况)

         3.推拉结合模式

                对于普通用户,该用户发布的信息实时推送到订阅的粉丝手中,而对应于大v(拥有粉丝数量众多的用户),对于其粉丝分两种情况:

                        1.非活跃用户 :  采用拉模式,即该用户上线后才去获取数据

                        2.活跃用户: 采用推模式,将数据推送到该用户的收件箱中

        三者的对比 

 在实现Feed流的时候(用推方案)选用List还是Set的取舍问题:        

        技术要求:

                 必须是有序的收件箱,因为要根据数据的先后顺序分页拉取数据的结果             

         

        List: 

                可以通过下标实现有序的要求,但是面对动态生成的数据会出现问题,由于list的下标是不可变得,所以会出现插入新数据之后导致之前的分页 信息错乱,具体情况如下所示,重复读取了数据6

                原本第二页应当是

         SortedSet:

                可以通过score来实现排序的要求,也就是说在取数据的时候按照时间戳(自行设计的当做score的变量)来实现取后几名的情况.同时可以在取得数据后记住当前页的最后的时间戳,在下次取数据的时候直接和存取的上次取得的最后的时间戳做比较,只有大于上次时间戳的数据才来做分页.

总结: 当数据会发生变化时,将数据存到SortedSet中!!(比如排行榜之类的情况)

        

                

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis