Redis数据类型求数据交集
求两个数据的交集:使用Set数据类型的intersect方法即可实现。
Feed流提供关注推送的思想
Feed流顾名思义就是把信息流喂养给用户。、
而喂养的方式分为三种。
一种是主动喂养(又称为推模式,又叫做写扩散)这种方式是信息源把所有人全部推送一遍
优势是:可以时效高,可以不用临时拉取。
劣势是:内存占用过高,需要推送一份数据到很多的地方
第二种是被动被获取(又称为拉模式,又叫做读扩散)这种方式就是如果想要信息的人自己到信息源去拉。、
优势是:比较节省空间,当一个用户处理完信息即可删除。
劣势是:当多个用户同时需要拉取大量的信息时,会对服务器产生大量的压力。
第三种是拉推兼得的模式
这种模式是在当你的信息源不需要向很多用户都推送的话,就采用推模式。
当你的信息源向很多人进行推送的时候,你就可以对活跃的用户进行推模式,对不活跃的用户进行拉模式。
这种模式能够充分利用前面两种方式的优点,一般推荐第三种。
Redis来实现动态分页查询
为什么需要动态分页查询:
在Feed流中的数据会不断更新,所以在数据的角标也会不断变化,和微信的聊天聊天记录是一样的逻辑,所以传统的分页查询方式是不可行的。
动态分页查询的两个参数:
一个参数是时间戳(记录上次的时间戳)
一个参数是offset(偏移量)。
而为什么有了时间戳还需要偏移量呢?
因为对于一个时间戳可能对应多条数据,所以需要偏移量来确定上次的最后一条记录。
数据可以使用Redis的SortedSet来实现时间戳的单调性。
同时可以使用SortedSet的reverseRangeByScoreWithScores函数来实现返回指定分数范围内的成员列表,按照分数从高到低进行排序,并可以实现跳过多少条数据和取多少条数据的功能。、
Java8的Stream流功能
stream流提供了很多库函数对于数据进行处理,如map(可以把每一个元素映射成其他形式),filter等等。
posted on
浙公网安备 33010602011771号