zoukankan      html  css  js  c++  java
  • 四,redis常用的数据类型--set和zset

    set和zset都是集合

    set是对string类型的无序集合,zset是有序的集合

    set中的值是不能重复的;

      是否是集合 是否有序 有序实现方式 应用场景
    set 标签,社交
    zset 分值 排行系统,社交

     


     

     

     

     

    一,set常用指令

     set是不允许有重复的值存在的。

    1)sadd和smembers t添加set和获取set中的值

    2) sismember 还可以判断set中是否包含某个字符串   

    127.0.0.1:6379> sadd s laoli
    (integer) 1
    127.0.0.1:6379> sadd s laowang
    (integer) 1
    127.0.0.1:6379> sadd s laozhang
    (integer) 1
    127.0.0.1:6379> sadd s laohao
    (integer) 1
    127.0.0.1:6379> SMEMBERS s
    1) "laohao"
    2) "laowang"
    3) "laozhang"
    4) "laoli"
    127.0.0.1:6379> SMEMBERS s
    1) "laohao"
    2) "laowang"
    3) "laozhang"
    4) "laoli"
    127.0.0.1:6379> SISMEMBER s laohao
    (integer) 1
    127.0.0.1:6379> SISMEMBER s laohao1
    (integer) 0

    3)scard 返回集合中的元素总数

    127.0.0.1:6379> SMEMBERS s
    1) "laohao"
    2) "laowang"
    3) "laozhang"
    4) "laoli"
    127.0.0.1:6379> scard s
    (integer) 4

    4)srem移除集合中的一个或多个字符串

    127.0.0.1:6379> SMEMBERS s
    1) "laohao"
    2) "laowang"
    3) "laozhang"
    4) "laoli"
    127.0.0.1:6379> srem s laohao laoli
    (integer) 2
    127.0.0.1:6379> SMEMBERS s
    1) "laozhang"
    2) "laowang"

    5)srandmember 随机抽取集合中的一个或者多个元素

    127.0.0.1:6379> SMEMBERS s
    1) "laowang"
    2) "laok"
    3) "laozhang"
    4) "laoli"
    5) "laob"
    127.0.0.1:6379> SRANDMEMBER s 1
    1) "laowang"
    127.0.0.1:6379> SRANDMEMBER s 1
    1) "laob"
    127.0.0.1:6379> SRANDMEMBER s 1
    1) "laozhang"
    127.0.0.1:6379> SRANDMEMBER s 2
    1) "laozhang"
    2) "laoli"

    6)spop 移除并返回集合中的一个随机元素

          spop 应该是随机移除集合中的一个元素并且返回一个移除的值

    127.0.0.1:6379> SMEMBERS s
    1) "laozhang"
    2) "laowang"
    3) "laoli"
    4) "laok"
    5) "laob"
    127.0.0.1:6379> spop s
    "laob"
    127.0.0.1:6379> spop s
    "laowang"
    127.0.0.1:6379> SMEMBERS s
    1) "laozhang"
    2) "laoli"
    3) "laok"

    7)smove 将一个set中的元素移动到另一个set中

         比如,讲s中的test移动到s1中

    比如在抽奖系统中,讲一等奖中奖用户放到一等奖的名单中,二等奖的用户放在二等奖的名单中。

    127.0.0.1:6379> SMEMBERS s
    1) "laohao"
    2) "laozhang"
    3) "test"
    4) "laowang"
    5) "laoli"
    6) "laok"
    127.0.0.1:6379> SMEMBERS s1
    1) "laojiao"
    2) "laowang"
    3) "laozhang"
    4) "laoli"
    127.0.0.1:6379> smove s s1 test
    (integer) 1
    127.0.0.1:6379> SMEMBERS s1
    1) "laojiao"
    2) "laowang"
    3) "laozhang"
    4) "laoli"
    5) "test"

    8)set是一个集合,肯定会有交集,并集和差集;

    sdiff  查看两个集合不同的元素--差集

    sinter 查看两个集合中相同的元素---交集

    sunion 两个集合中所有的元素---并集

    127.0.0.1:6379> SMEMBERS s
    1) "laohao"
    2) "laozhang"
    3) "laowang"
    4) "laoli"
    5) "laok"
    127.0.0.1:6379> SMEMBERS s1
    1) "laojiao"
    2) "laowang"
    3) "laozhang"
    4) "laoli"
    5) "test"
    127.0.0.1:6379> sdiff s s1
    1) "laohao"
    2) "laok"
    127.0.0.1:6379> SINTER s s1
    1) "laozhang"
    2) "laowang"
    3) "laoli"
    127.0.0.1:6379> SUNION s s1
    1) "laohao"
    2) "laozhang"
    3) "laojiao"
    4) "test"
    5) "laowang"
    6) "laoli"
    7) "laok"

    二,zset的常用指令

    1)zadd和zrange

         zadd是添加元素

         zrange是查看元素

    127.0.0.1:6379> zadd s 1 laoli
    (integer) 1
    127.0.0.1:6379> zadd s 2 laowang
    (integer) 1
    127.0.0.1:6379> zadd s 3 laozhang
    (integer) 1
    127.0.0.1:6379> zadd s 4 laoxu
    (integer) 1
    127.0.0.1:6379> zrange s 0 -1
    1) "laoli"
    2) "laowang"
    3) "laozhang"
    4) "laoxu"

    2)zset的排序指令

    首先,我们赋值,比如下面的 语文分数

    127.0.0.1:6379> zadd score_ch 98 laozhang
    (integer) 1
    127.0.0.1:6379> zadd score_ch 95 laoli
    (integer) 1
    127.0.0.1:6379> zadd score_ch 93 laowang
    (integer) 1
    127.0.0.1:6379> zadd score_ch 89 laohao
    (integer) 1

    ①ZRANGEBYSCORE   从低到高排序,从数值中可以看到laohao的值分数最低

    127.0.0.1:6379> ZRANGEBYSCORE score_ch -inf +inf
    1) "laohao"
    2) "laowang"
    3) "laoli"
    4) "laozhang"
    127.0.0.1:6379> ZRANGEBYSCORE score_ch -inf +inf withscores 1) "laohao" 2) "89" 3) "laowang" 4) "93" 5) "laoli" 6) "95" 7) "laozhang" 8) "98"

    可以查看区间分数,如果不存在的话,就返回empty,如果存在就返回存在区间的值;有集合的地方,总会有区间;

    127.0.0.1:6379> ZRANGEBYSCORE score_ch 1 2
    (empty list or set)
    127.0.0.1:6379> ZRANGEBYSCORE score_ch 80 94
    1) "laohao"
    2) "laowang"
    127.0.0.1:6379> ZRANGEBYSCORE score_ch 80 94 withscores 1) "laohao" 2) "89" 3) "laowang" 4) "93"

    ②zrem 移除集合中 的指定元素

    127.0.0.1:6379> zrange score_ch 0 -1
    1) "laohao"
    2) "laowang"
    3) "laoli"
    4) "laozhang"
    127.0.0.1:6379> zrem score_ch laozhang laohao
    (integer) 2
    127.0.0.1:6379> zrange score_ch 0 -1
    1) "laowang"
    2) "laoli"

    ③zrevrange 从高到底排序

    127.0.0.1:6379> zrevrange score_ch 0 -1 withscores
    1) "laoli"
    2) "95"
    3) "laowang"
    4) "93"

    ④zcount 判断集合区间中有多少值

    127.0.0.1:6379> zrange score_ch 0 -1 withscores
     1) "sun"
     2) "56"
     3) "ke"
     4) "57"
     5) "liu"
     6) "65"
     7) "laowang"
     8) "93"
     9) "laoli"
    10) "95"
    127.0.0.1:6379> zcount score_ch 50 60
    (integer) 2

    指令可以看出50到60之间的有两个值;

    三,应用场景

    1,zset是可以排序的,我们可以做阅读量排行,加权判断,热门等等;

    2,set和zset是一个集合,可以在集合中给用户打不同的标签,多个用户中找相同点,做好友推荐;共同好友等等;

         比如,微博中的共同关注等等

    127.0.0.1:6379> SMEMBERS s1) "laohao"2) "laozhang"3) "test"4) "laowang"5) "laoli"6) "laok"127.0.0.1:6379> SMEMBERS s11) "laojiao"2) "laowang"3) "laozhang"4) "laoli"127.0.0.1:6379> smove s s1 test(integer) 1127.0.0.1:6379> SMEMBERS s11) "laojiao"2) "laowang"3) "laozhang"4) "laoli"5) "test"

  • 相关阅读:
    【mybatis】02-spring集成
    【Spring】xxAware
    【性能调优】Arthas
    【算法】其他算法(字典树Trie等)
    【多线程】JDK源码类图
    POJ-1251-Jungle Roads
    Prim算法模板
    敌兵布阵-线段树(1)
    hdu-1541-Stars (树状数组)
    母牛生小牛
  • 原文地址:https://www.cnblogs.com/invban/p/14202868.html
Copyright © 2011-2022 走看看