Redis其他数据结构应用(续)

161 阅读3分钟

Bitmap

  • 用户签到活动

    假设举行一个连续登录(根据实际业务来判断哪些行为属于连续登录)7天领奖品活动,用户id:k1_7days_active

    127.0.0.1:6379> setbit k1_7days_active 1(第一天) 1
    (integer) 0
    127.0.0.1:6379> setbit k1_7days_active 2(第二天) 1
    (integer) 0
    127.0.0.1:6379> setbit k1_7days_active 3(第三天) 1
    (integer) 0
    127.0.0.1:6379> setbit k1_7days_active 4(第四天) 1
    (integer) 0
    127.0.0.1:6379> setbit k1_7days_active 5(第五天) 1
    (integer) 0
    127.0.0.1:6379> setbit k1_7days_active 6(第六天) 1
    (integer) 0
    127.0.0.1:6379> setbit k1_7days_active 7(第七天) 1
    (integer) 0
    127.0.0.1:6379> bitcount k1_7days_active
    (integer) 7
    

    假设举行一个联系登录7天领奖品活动,用户id:k2_7days_active

    127.0.0.1:6379> 
    127.0.0.1:6379> setbit k2_7days_active 1 1
    (integer) 0
    127.0.0.1:6379> setbit k2_7days_active 2 1
    (integer) 0
    这里缺少第三天
    127.0.0.1:6379> setbit k2_7days_active 4 1
    (integer) 0
    127.0.0.1:6379> setbit k2_7days_active 5 1
    (integer) 0
    127.0.0.1:6379> setbit k2_7days_active 6 1
    (integer) 0
    127.0.0.1:6379> setbit k2_7days_active 7 1
    (integer) 0
    127.0.0.1:6379> bitcount k2_7days_active
    (integer) 6
    
  • 统计某个时间区间范围内活跃用户

    假设用户id为长整形

    用户1:12345

    用户2:23456

    用户3:34567

    //12345 20200201~20200205 
    127.0.0.1:6379> setbit 20200201 12345 1
    (integer) 0
    127.0.0.1:6379> setbit 20200202 12345 1
    (integer) 0
    127.0.0.1:6379> setbit 20200203 12345 1
    (integer) 0
    127.0.0.1:6379> setbit 20200204 12345 1
    (integer) 0
    127.0.0.1:6379> setbit 20200205 12345 1
    //23456 20200201 20200202 20200205
    127.0.0.1:6379> setbit 20200201 23456 1
    (integer) 0
    127.0.0.1:6379> setbit 20200202 23456 1
    (integer) 0
    127.0.0.1:6379> setbit 20200205 23456 1
    (integer) 0
    //34567 20200201 20200204 20200205
    127.0.0.1:6379> setbit 20200201 34567 1
    (integer) 0
    127.0.0.1:6379> setbit 20200204 34567 1
    (integer) 0
    127.0.0.1:6379> setbit 20200205 34567 1
    (integer) 0
    //统计20200201~20200205 都活跃的用户
    127.0.0.1:6379> bitop or destkey 20200201 20200202 20200203 20200204 20200205
    (integer) 4321
    127.0.0.1:6379> bitcount destkey
    (integer) 3
    //统计20200201~20200203 连续活跃的用户
    127.0.0.1:6379> bitop and destkey1 20200201 20200202 20200203 
    (integer) 4321
    127.0.0.1:6379> bitcount destkey1
    (integer) 1
    ​
    

Geospatial

  • 计算地理位置

    举例:北京、上海、杭州

    127.0.0.1:6379> GEOADD cities 116.404269 39.91582 "beijing" 121.478799 31.235456 "shanghai"
    (integer) 2
    127.0.0.1:6379> ZRANGE cities 0 -1 WITHSCORES
    1) "shanghai"
    2) "4054803475356102"
    3) "beijing"
    4) "4069885555377153"
    127.0.0.1:6379> GEODIST cities beijing shanghai km
    "1068.5677"
    127.0.0.1:6379> GEOHASH cities shanghai 
    1) "wtw3sq4ptp0"
    127.0.0.1:6379> GEOPOS cities beijing shanghai
    1) 1) "116.40426903963088989"
       2) "39.91581928642635546"
    2) 1) "121.47879928350448608"
       2) "31.23545629441388627"
    127.0.0.1:6379> GEOADD cities 120.165036 30.278973 hangzhou
    (integer) 1
    127.0.0.1:6379> GEORADIUS cities 120 30 500 km
    1) "hangzhou"
    2) "shanghai"
    127.0.0.1:6379> GEORADIUSBYMEMBER cities shanghai 200 km
    1) "hangzhou"
    2) "shanghai"
    127.0.0.1:6379> ZRANGE cities 0 -1 WITHSCORES
    1) "hangzhou"
    2) "4054134264615180"
    3) "shanghai"
    4) "4054803475356102"
    5) "beijing"
    6) "4069885555377153"
    127.0.0.1:6379> ZREM cities hangzhou
    (integer) 1
    127.0.0.1:6379> ZRANGE cities 0 -1 WITHSCORES
    1) "shanghai"
    2) "4054803475356102"
    3) "beijing"
    4) "4069885555377153"
    127.0.0.1:6379
    原文链接:https://blog.csdn.net/zhang197093/article/details/72979038
    

Hyperloglogs

  • 需要在一小时内统计不同的用户

    例如 USER:LOGIN:2020020111,我们要统计在 2020 年 02月 01 日上午11 点至 12 点之间发生用户登录操作的非重复用户数

    127.0.0.1:6379> pfadd USER:LOGIN:2020020111 A
    (integer) 1
    127.0.0.1:6379> pfadd USER:LOGIN:2020020111 B C D E F
    (integer) 1
    127.0.0.1:6379> pfcount USER:LOGIN:2020020111
    (integer) 6
    

\