Redis基本命令(二)

集合类型
增加删除命令

       sadd key member [ member .... ]
        srem key member [ member .... ]
        sadd 命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为在一个集合中不能有相同的元素,所以如果要加入的元
            素已经存在与集合中就会忽略这个元素。返回值是成功加入的元素数量(忽略的元素不计算在内)
        srem 命令用来从集合中删除一个或多个元素,并返回删除成功的个数
获得集合中的所有元素
       smembers key
        返回集合中的所有元素
判断元素是否在集合中
       sismember key member
        判断一个元素是否在集合中是一个时间复杂度为 0(1) 的操作,无论集合中有多少个元素, sismember 命令始终可以极快的返回结果。当
            值存在时 sismember 命令返回 1 ,当值不存在或者键不存在时返回 0
集合间运算
        sdiff key [ key ...... ]
        sdiff 命令用来对多个集合执行差集运算。集合 A 与集合 B 的差集表示为 A- B ,代表所有属于 A 且不属于 B 的元素构成的集合,即 
            A - B = { x| x∈A  且 x ∈/B }
           命令使用方法:
           sadd seta 1 2 3 4 6 7 8
            sadd setb 2 3 4
            sdiff seta setb
    该命令支持同时传入多个键, 计算顺序是先计算 seta 和 setb 在计算结果与 setc 的差集
            sadd setc 2 3 4
            sdiff seta setb setc

    sinter key [ key ..... ]
       该命令用来对多个集合执行交集运算。集合 A 与集合 B 的交集表示为 A∩B,代表所有属于 A 且属于 B 的元素构成的集合
            即 A∩B = { x| x∈A  且 x ∈B }

            命令使用方法:
                sinter seta setb
                该命令同样支持同时传入多个键
    sunion key [ key ...... ]
    该命令用来对多个集合执行并集运算。集合 A 与集合 B的并集表示为 A∪B ,代表所有属于A或所有属于B的元素构成的集合
            即  A∪B = { x| x∈A  或 x ∈B }

            命令使用方法:
                sunion seta setb
                该命令同样支持同时传入多个键
    获得集合中元素的个数
            scard key
    进行集合运算并将结果存储
           sdiffstore destination key [ key ...... ]
            sinterstore destination key [ key ...... ]
            sunionstore destination key [ key ...... ]
            sdiffstore 命令和 sdiff 命令功能一样,唯一的区别就是前者不会直接返回运算的结果,而是将结果存在 destination 键中
            sinterstore 这个命令类似于 sinter 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
            sunionstore 这个命令类似于 sunion 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
    随机获得集合中的元素
            srandmember key [ count ]
            该命令用来随机从集合中获取一个元素
            还可以传递 count 参数来一次随机获得多个元素,根据 count 的正负不同,具体表现也不同
                当count 为正数时,srandmember 会随机获取从集合里获得 count 个不重复的元素。如果 count 的值大于集合中的元素个数,则 
                    srandmember 会返回集合中的全部元素
                当 count 为负数时,srandmember 会随机从集合中获得 |count| 个的元素,这些元素有可能相同
            注:当传递count 参数时,在windows环境下提示命令参数错误
    从集合中弹出一个元素
            spop key
            由于集合类型的元素是无序的,所以 spop 命令会从集合中随机选择一个元素弹出,返回值为被移除的随机元素,如果 key 不存在或者 
                key 为空集时,返回 nil

有序集合类型(sorted set)
增加元素

      zadd key score member [ score member ...... ]
        zadd 命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在,则会用新的分数替换原有的分数。zadd命令的返回
            值是新加入到集合中的元素个数(不包含之前已经存在的元素)

    获得元素的分数
      zscore key member
    获得排名在某个范围的元素列表
          zrange key start stop [ withscores ]
            zrevrange key start stop [ withscores ]
            zrange 命令会按照元素分数从小到大的顺序返回索引从 start 到 stop 之间的所有元素(包含两端的元素)。zrange 命令和 lrange 命
                令十分相似,如索引都是从0开始,负数代表从后向前查找(-1 表示最后一个元素)。如果需要同时获得元素的分数的话,可以在 
                 zrange 命令的尾部加上 widthscores 参数
            注:如果两个元素的分数相同,redis会按照字典顺序(即 0<9<A<Z<a<z 这样的顺序)来进行排列。如果元素的值是中文,则取决于
                   中文的编码方式,如图:

            zrevrange 命令和 zrange 的唯一不同在于 zrevrange 是按照元素分数从大到小的顺序给定结果的
    获得指定分数范围内的元素
    zrangebyscore key min max [ withscores ] [ limit offset count ]
            该命令按照元素分数从小到大的顺序返回分数在 minmax 之间(包含 minmax 的元素)
            如果希望分数范围不包含端点值,可以在分数前加上 "(" 符号,例如:希望返回80分到100分的的数据,可以包含80分单不包含100分
                命令:zrangebyscore scoreboard 80 (100 widthscores

                minmax 还支持无穷大,同 zadd 命令一样,-inf 和 +inf 分别表示负无穷大和正无穷大。比如希望得到所有分数高于 80分(不包含80分)的人的名单,但是却不知道最高分是多少,这是就可以使用 +inf
               zrangebyscore scoreboard (80 +inf

                命令 limit offset count 与 SQL 中的用法基本相同,即在获得的元素列表的基础上向后偏移 offset 个元素并且只获取前count个元素


                zrevrangebyscore 不仅是按照元素分数从大往小的顺序给出结果,而且他的 minmax 的参数的顺序和 zrangebyscore 命令是相反的
    增加某个元素的分数
            zincrby key increment member
            zincrby 命令可以增加一个元素的分数,返回值是更改后的分数,例如想给peter 加 4 分
               zincrby scoreborder 4 peter
               increment  也可以是负数表示减分
                 zincrby scoreborder -4 peter
            如果指定元素不存在,redis 在执行命令前会先建立它并将他的值赋为0在执行操作        
    获得集合中元素的数量
          zcard key
        获得指定分数范围内的元素个数
            zcount key min max
            zcount 命令的 min max 参数的特性与 zrangebyscore 命令中的一样

    删除一个或多个元素


       zrem key member [ member .... ]
        zrem 命令的返回值是成功删除的元素数量(不包含本来就不存在的元素)

    按照排名范围删除元素
           zremrangebyrank key start stop
            按照元素分数从小到大的顺序(即索引 0 表示最小的值)删除在指定排名范围内的所有元素,并返回删除元素的数量

    按照分数范围删除元素
         zremrangebyscore key min max
            zremrangebyscore 命令删除指定分数范围内的所有元素,参数 minmax 的特性和 zrangebyscore 命令中的一样,返回值是删除
                元素的个数
    获得元素的排名
         zrank key member
            zrevrank key member
            zrank 命令会按照元素分数从小到大的顺序获得指定的元素排名(从 0 开始,即分数最小的元素排名为0)

            zrebrank 命令则正好相反,分数最大的元素排名为0
    计算有序集合的交集
           zinterstore destination numkeys key [ key ... ] [ weights weight [ weight ... ] ] [ aggregate SUM | MIN | MAX ]
            zinterstore 命令用来计算多个有序集合的交集病将结果存储在 destination 键中(同样以有序集合类型存储),返回值为 destination 
                键中元素的个数,destination 键中元素的分数是由 aggregate 参数决定的
            1. 当 aggregate 是 SUM (也就是默认值),destination 键中元素的分数是每个参与计算的集合中该元素分数的和

            2.当 aggregate 是 MIN 时,destination 键中元素的分数是参与计算的集合中该元素分数最小值

            3.当 aggregate 是 MAX 是,destination 键中元素的分数是参与计算的集合中该元素分数最大值

          zinterstore 命令还能通过 weights 参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重
            如:
    计算集合间的并集
           zunionstore 
            用法与 zinterstore 命令的用法一样

事务
事务的原理是先将属于一个事务的命令发送给redis ,然后再让 redis 依次执行这些命令

       错误处理
        (1)语法错误。语法错误指命令不存在或者命令参数个数不对。这种情况下,事务中只要有一个命令有语法错误,执行exec命令后redis
                就会直接返回错误,连语法正确的命令也不会执行
                注:redis 2.6.5 之前的版本会忽略有语法错误的命令,然后执行事务中其他语法正确的命令。
        (2)运行错误。运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键,这种错误在实际执行之前redis是无
                法发现的,所以在事务里这样的命令是会被redis接受并执行的,如果事务里的一条命令出现运行错误,事务里其他的命令依然会继
                续执行(包含出错命令之后的命令)
    reids的事务没有关系数据库事务提供的回滚功能,为此开发者必须在事务执行出错之后自己收拾剩下的摊子
   watch 命令
        watch key [ key ... ]
        监视一个或多个 key ,如果在事务执行之前这个或这些 key 被其他命令所改动,那么事务将被打断,监控一直持续到exec命令


    unwatch
        取消 watch 命令对所有 key 的监视


    生存时间
        expire
        expire 命令的使用方法为 expire key seconds ,其中 seconds 参数表示键的生存时间,单位是秒,该参数必须是整数

        命令返回 1表示设置成功,返回 0 则表示键不存在或设置失败

        如果想知道一个键还有多久会被删除,可以使用 ttl 命令。返回值是键的剩余时间(单位是秒),

        如果想取消键的生存时间设置(即将键恢复成为永久的),可以使用 persist 命令。如果生存时间被成功清除则返回 1 。否则返回 0


        除了 persist 命令之外,使用 set 、getset 命令为键赋值也同时会清楚键的生存时间
        注: incr 、lpush、hset、zrem 命令均不会影像键的生存时间

        精确控制键的生存时间应该使用 pexpire 命令。该命令的单位是毫秒
        可以使用 pttl 命令以毫秒为单位返回键的剩余时间
        另外不太常用命令:expireat 和 pexpireat,该命令第二个参数表示键的生存时间的截至时间,expireat 单位秒 pexpireat 单位毫秒
sort 
      该命令可以对列表类型,集合类型,和有序集合类型键进行排序
        列表类型:


        有序集合类型排序时,会忽略元素的分数,只针对元素的自身的值进行排序


        除了可以排列数字外,sort 命令还可以通过 alpha 参数实现按照字典顺序排列非数字元素


        sort 命令的 desc 参数可以实现将元素按照从大到小的顺序排列
        sort 命令还支持 limit 参数来返回指定范围的结果,用法和sql 语句一样 limit offset count ,表示跳过前 offset 个元素并获取之后的
            count 个元素


        sort 命令 by 参数,默认情况下, sort uid 直接按照 uid 中的值排序,通过 by 参数,可以让 uid 按照其他键的元素来排序

        user_level_* 是一个占位符,他先取出 uid 中的值,然后在用这个值来查找相应的键
            比如在对 uid 列表进行排序时, 程序就会先取出 uid 的值 1234 , 然后使用 user_level_1 、 user_level_2 、 user_level_3 
            和   user_level_4 的值作为排序 uid 的权重。

        使用 get 选项,可以根据排序的结果来取出相应的键值


        一个sort 命令中可以有多个 get 参数(而 by 参数只能有一个)


        默认情况下 sort 命令会直接返回排序结果,如果希望保存排序结果,可以使用 store 参数,保存后键的类型为列表类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值