美文网首页
基于redis的收藏服务的设计思考

基于redis的收藏服务的设计思考

作者: 赤子心_d709 | 来源:发表于2019-12-27 21:21 被阅读0次

    背景

    一个收藏服务该如何设计,来满足基本的业务的需求

    用户收藏/取消一个视频,文章
    用户查看收藏视频列表,文章列表,按照时间排序,支持翻页
    用户看具体一个/多个视频,文章,检查是否被收藏
    用户查看收藏视频列表,文章列表总数

    对象

    上面提到的文章,视频,就是实体类型,抽象为ObjectType
    文章有文章id,如article id,视频有视频id,如video id
    上面提到的用户,即UserId

    设计

    里面的排序方式可以以redis的有序集合为例,满足排序等场景的要求
    这里直接列举出来

    收藏: zadd
    方式: ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
    参数:
    -- KEY:{userId}_{objectType}
    -- SCORE1:time.now()
    -- VALUE1: objectId
    说明:score传时间值, 满足后续按时间排序

    取消收藏: zrem
    方式:ZREM key member [member ...]
    参数:
    -- KEY:{userId}_{objectType}
    -- member: objectId

    是否收藏: ZSCORE
    方式: ZSCORE key member
    参数:
    -- key:{userId}_{objectType}
    -- member:{objectId}
    说明:满足看是否收藏不同类型的对象id,是否收藏视频A1,是否收藏文章B2

    收藏列表,带时间排序: ZREMRANGEBYSCORE
    方式:ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
    参数:
    -- key:{userId}_{objectType}
    -- min: time(0)
    -- max: time.now()
    -- offset:0
    -- count: maxInt
    说明:满足按收藏类型按时间新老(time.now() - > time(0))排序

    收藏数: ZCARD
    方式:ZCARD KEY_NAME
    参数:
    -- key:{userId}_{objectType}
    说明:收藏某一个类型实体的数量

    可以看到,上面的redis有序集合已经满足了我们最简单的需求

    拓展思考

    假设再有其他的场景

    一个视频总共被多少人收藏过,被哪些人收藏过
    两个人共同收藏的视频列表,视频总数

    等等延伸开的实体与关系之间的量化表达,分析,如何来实现
    基本的redis实现也不能完全cover,可以用到其他方式

    比如图数据库,可以理解为一堆点和边的处理,参照refer
    点即为同构或者异构的实体类型,
    边理解为两两之前的关系(可单向,双向),可以用来表示收藏,关注等动作关系
    可以基于此做进一步分析,比如二度人脉,等等
    这里不展开介绍,后面看了再说

    refer

    redis有序集合
    图数据库

    相关文章

      网友评论

          本文标题:基于redis的收藏服务的设计思考

          本文链接:https://www.haomeiwen.com/subject/xvxjoctx.html