zoukankan      html  css  js  c++  java
  • Redis实现用户关注功能

    最近项目要涉及到粉丝关注问题,权衡再三还是使用Redis实现比较方便,使用Redis的有序集合可以做到根据关注的时间有序的取出列表,假设IDme别人IDother

     

    1. 添加关注

    添加关注分为两步:

    1、将对方id添加到自己的关注列表中;

    Redis::ZADD("me:follow", time(), other)

    2、将自己的id添加到对方的粉丝列表中:

    Redis::ZADD("other:fans", time(), me)

    2. 取消关注

    取消关注同样分为两步:

    1、将对方id从自己的关注列表中移除;

    Redis::ZREM("me:follow", other)

    2、将自己的id从对方的粉丝列表中移除:

    Redis::ZREM("other:fans", me)

    3. 关注列表

    1查看我的关注列表:

    Redis::ZRANGE("me:follow", 0 , -1)

    2查看别人的把id换掉就可以

    Redis::ZRANGE("other:follow", 0 , -1)

    4. 粉丝列表

    1查看我的粉丝列表:

    Redis::ZRANGE("me:fans", 0 , -1)

    2查看别人的把id换掉就可以

    Redis::ZRANGE("other:fans", 0 , -1)

    5. 人物关系

    1 我单向关注他

    我单向关注他,要同时满足两个条件:1、我的关注列表中(或他的粉丝列表中)2、我的粉丝列表中没有(或他的关注列表中没有)

    Redis::ZSCORE("me:fans", other)   #未返回分数

    Redis::ZSCORE("me:follow", other) #返回分数

    2 他单向关注我

    他单向关注我,要同时满足两个条件:1、我的关注列表中没有(或他的粉丝列表中没有)2、我的粉丝列表中(或他的关注列表中)

    Redis::ZSCORE("other:fans", me)   #未返回分数

    Redis::ZSCORE("other:follow", me) #返回分数

    3 是否互粉

    我和某人是否互粉,要同时满足两个条件:1、我的关注列表中有他(或他的粉丝列表中有我)2、我的粉丝列表中有他(或他的关注列表中有我)。同时成立才为互粉。

    Redis::ZSCORE("me:fans", other)   #返回分数

    Redis::ZSCORE("me:follow", other) #返回分数

    6. 数量相关

    1 我的关注数

    Redis::ZCARD("me:follow");    #返回数量

     

     

    2 我的粉丝数

    Redis::ZCARD("me:fans");     #返回数量

    7. 排序取出所有的人

    1、根据关注的时间倒叙取出用户的id

    Redis::ZREVRANGE("me:fans", 0, -1, TRUE); #倒序取值

    2、根据关注时间顺序取出用户的id

    Redis::ZRANGE("me:fans", 0, -1, TRUE); #顺序取值

  • 相关阅读:
    高效 告别996,开启java高效编程之门 问题
    高效 告别996,开启java高效编程之门 3-3实战:利用Lambda+Stream处理业务逻辑
    高效 告别996,开启java高效编程之门 3-2传统方式处理业务逻辑
    高效 告别996,开启java高效编程之门 3-1流式编程开场与案例场景概述
    无限树
    拖拽示例
    日期格式化字符串 字符串转化成日期
    loading
    It运维项目整理
    免费的二维码发布平台 http://zhifubao.masao.top:8282/assets/index.html
  • 原文地址:https://www.cnblogs.com/caiji/p/8395185.html
Copyright © 2011-2022 走看看