zoukankan      html  css  js  c++  java
  • 利用Redis Sorted Set实现排行榜功能

    Redis 有序集合(sorted set)
    一、向集合中添加(多个)元素和元素分值

    ZADD key score1 member1 [ score2 member2]
    
    1. ZADD testkey 1 redis
    2. ZADD testkey 2 mysql 3 java

    二、遍历集合

    ZRANGE key 0 -1 WITHSCORES
    ZRANGE testkey 0 -1 WITHSCORES

    三、 获取有序集合的成员数

    zcard key
    
    zcard  testkey 

    四、 对集合中元素进行加减
    Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment

    1.可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,
       就是让 member 的 score 值减去 5 。

    2.当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member
       等同于 ZADD key increment member 。

    3.当 key 不是有序集类型时,返回一个错误。

    4.分数值可以是整数值或双精度浮点数。

    ZADD myzset 1 "one"
    ZADD myzset 2 "two"
    ZINCRBY myzset 2 "one"
    ZRANGE myzset 0 -1 WITHSCORES

    发现one变成了3

     五、返回有序集合中指定成员的索引

    ZRANK key  member

    其中有序集成员按分数值递增(从小到大)顺序排列。

    也就是说数值越大,返回的索引越大

    red:0> ZADD testkey 1 redis
    "1"
    
    red:0>ZADD testkey 2 mysql 3 java
    "2"
    
    red:0>ZADD testkey 2 mongo 3 tomcat
    "2"
    
    red:0>ZADD testkey 2 mongoDB 4 app

    六、按照索引递增递减排序
    递增:

    red:0> ZRANGE testkey 0 -1 WITHSCORES    

     //递减

    red:0>ZREVRANGE  testkey 0 -1 WITHSCORES    

     ZREVRANGEBYSCORE key +inf -inf # 逆序排列所有成员

    red:0>ZREVRANGEBYSCORE testkey +inf -inf

     ZREVRANGEBYSCORE testkey 2 1 # 逆序排列值介于 1和 2之间的成员
    七、返回一个key在集合中的分数

     ZSCORE key member

    看完上面的sorted SET,我们试着实现一下点赞功能

    7.1 单个用户点赞数实现
    每当一个用户给它点赞,记录用户的ID

    ZINCRBY wenZhangID  1 userID

    取消赞

    ZINCRBY wenZhangID -1 userID

    当然这里有一个逻辑,一个用户只能点赞并取消
    如果要统计一个用户的这篇文章被点赞了多少次,可以直接取里面有多少个成员就可以了

    zcard wenZhangID

    7.2 点赞排行设计与实现
    其实就是再新建一个集合A,里面就存用户ID和点赞数
    每当单个用户的点赞数发生变化的时候,同步更新A里面的个人点赞数
    然后实时计算top就可以了,比如top100

    ZREVRANGE  key 0 99 WITHSCORES   


    ————————————————
    版权声明:本文为CSDN博主「qq_26249609」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_26249609/article/details/103566848

  • 相关阅读:
    javascript中的defer是什么?
    AJAX请求中含有数组解决办法
    关于字符串replace方法第二个参数探究
    教你把百度的关键字搜索偷过来用用。
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/14482528.html
Copyright © 2011-2022 走看看