<<<<<<< HEAD Feed Flow 准备工作 - 推荐设计 ======= Feed Flow 准备工作 - 推荐设计 >>>>>>> 24b6b53 ( 【init】) <<<<<<< HEAD
UP | HOME
<<<<<<< HEAD
=======
>>>>>>> 24b6b53 ( 【init】)

Feed Flow 准备工作 - 推荐设计
发布于 8 22, 2020 by ThinkCat.

<<<<<<< HEAD

Table of Contents

  • 重复率低的推荐
    • 实现
    • 流程
    • Redis 布隆过滤器模块
      • 安装
      • 启动
      • ======= <<<<<<< HEAD

        重复率低的推荐

        实现

        =======

        重复率低的推荐

        实现

        >>>>>>> 24b6b53 ( 【init】)

        为了简单快速做到推荐的内容,用户浏览后,就不会或者极少概率再次看到。采用布隆过滤器方式。

        实现原理:维护一个已读集合,里面有10亿个元素,每次给接收人推队列的时候,监测这个接收人的这个消息是不是在这个集合中,不在的话再推给该人的队列。

        过滤器元素: receiverID+feedId。

        <<<<<<< HEAD

        流程

        =======

        流程

        >>>>>>> 24b6b53 ( 【init】)

        用户拉取到了信息,那么这条信息就可以标记为已读。用户队列正常发送最新信息,放入前也保证信息是不包括已读的。

        <<<<<<< HEAD

        推送消息

        =======

        推送消息

        >>>>>>> 24b6b53 ( 【init】)
        1. 消息产生:推给receiverId, 该用户必须在线,不在线不推送。检查(receiverId+feedId)是否是已读的,非已读的,才会往receiverId的队列中放消息(最新消息)
        2. 补充推送:按规则获取feed,推送到队列。或许会存在性能问题。
        <<<<<<< HEAD

        拉取消息

        =======

        拉取消息

        >>>>>>> 24b6b53 ( 【init】)

        拉取到消息,标记消息已读。同时将拉取的消息从队列中移除,再发起【补充推送】。

        redis里面创建了一个10亿数量的已读集合,0.0001误差率的过滤器,内存使用是 2.40G。这个量级可以接受。再说这个10亿的已读量,按100w活跃用户,每人一天读100条,10天才会占满。10天后,该过滤器作废,再重建集合(可能会导致10天前的数据会重新推送给用户)

        <<<<<<< HEAD

        复杂情况

        =======

        复杂情况

        >>>>>>> 24b6b53 ( 【init】)

        产生消息的数据量,远远低于拉取量,会导致用户队列中内容为空,即是:无新增的消息。

        <<<<<<< HEAD

        Redis 布隆过滤器模块

        安装

        =======

        Redis 布隆过滤器模块

        安装

        >>>>>>> 24b6b53 ( 【init】)
        git clone https://github.com/RedisBloom/RedisBloom.git
        cd RedisBloom
        make
        
        <<<<<<< HEAD

        启动

        =======

        启动

        >>>>>>> 24b6b53 ( 【init】)

        安装后,在 RedisBloom 目录中,生成 redisbloom.so 文件,拷贝到 redis 目录下,启动 redis 时候进行加载。

        # 在redis目录下
        ./src/redis-server --loadmodule ./redisbloom.so
        

        该命令可以做成一个shell脚本。

        详细参考:https://oss.redislabs.com/redisbloom/Quick_Start/