• Redis入门与命令汇总


    前言

      这里主要列出 Redis 的常用命令以供方便查阅,以及各类型的特点、案例等。

    Redis 的数据类型

      Redis 作为高性能的键值对数据库,为了适应较复杂的数据场景,提供了五种数据类型。

    • 字符串类型

        顾名思义,存储的是字符串。

        set key value,设置 key 的值为 value,如:set aa hello;

        get key,根据 key 取值,如:get aa;

        incr key,将 key 中存储的数字形式的字符串值增一,如果 key 不存在,那么会创建 key 并初始化为 0 ,然后再增一,如:incr num // num == 1;

        incrby key increment,跟 incr 命令一样,唯一不同是可以将 key 存储的值加上 increment,如:incrby num 10 // num == 10

        decr key,与 incr 命令用法一样,但其是让值减一,如:decr num // num == -1;

        decrby key increment,与 incrby 命令用法一样,但其是让值减上 increment,如:decrby num 10 // num == -10;

        incrbyfloat key increment,与 incrby 命令用法一样,但其增加的是浮点数,如:incrbyfloat num 0.1 // num == 0.1;

        append key value,将 value 追加到 key 的值的末尾,如:set aa hello,append aa redis,则 get aa // aa == helloredis;

        strlen key,返回 key 存储的值的长度,如:set aa hello,strlen aa // 5;

        mset key value [key value ....],与 set 一样,不过可以同时设置多个 key,如:mset aa 1 bb 2 cc 3;

        mget key [key...],与 get 一样,不过可以同时获取多个 key 的值,如:mget aa bb cc;

        getbit key offset,getbit 获取 key 存储的值的 offset 位置的值(0 或 1),如:set aa a,getbit aa 3 // 0,a 的 ascii 码为 97,而 97 的二进制为 01100001,而 01100001 的第三个为 0(从 0 开始);

        setbit key offset,setbit 与 getbit 相反,返回值为 key 的旧值;

        bitcount key [start] [end],获取 key 存储的值的二进制位为 1 的个数,start,end 可以限制范围,如:set aa hello,bitcount aa 0 1 则返回 7,0 1 计算的是 he 的二进制位为 1 的个数,所以 start,end单位是字节;

        bitop operation destkey key [key....],对多个 key 存储的值进行未运算,并将结果存储到 destkey 中。

      

    • 散列类型

        散列类型存储的也是字典结构,但字典的字段必须是字符串。

        hset key field value,与字符串类型的 set 命令类似,如:hset person age 10 // 存储的字典是 person.age;

        hget key field,与字符串类型的 get 命令类似,如:hget person age // 10;

        hmset key field value [ field value.... ],与 mset 类似;

        hmget key field [ field ... ],与 mget 类似;

        hgetall key,返回 key 存储的字典;

        hexists key field,判断 key 的字典的字段是否存在;

        hsetnx key field value,与 hset 类型,而 hsetnx 则是在 key 不存在时设置,如果 key 存在则不执行;

        hincrby key field increment,与 incrby 一样;

        hdel key field [ field... ],删除一个或多个字段;

        hkeys key,只获取 key 中所有的字段;

        hvals key,只获取 key 中所有的字段值;

        hlen key,获取 key 的字段数量。

    • 列表类型

        列表类型是存储一个有序的字符串列表,并且列表类型内部的实现方式是双向链表,所以向列表两端添加元素的复杂度是O(1)。

        lpush key value [ value... ],向 key 的左端添加一个或多个元素;

        rpush key value [ value... ],向 key 的右端添加一个或多个元素;

        lpop key,在 key 的左端弹出一个元素;

        rpop key,在 key 的右端弹出一个元素;

        llen key,获取 key 中列表的元素个数;

        lrange key start stop,获取指定区间的元素;

        lrem key count value,根据 count 的值,移除与 value 相等的元素,如果 count > 0 则从表头开始搜索,移除与 value 相等的元素,移除数量为 count;如果 count < 0 则从表尾开始搜索,移除与 value 相等的元素,移除数量为 count 的绝对值;如果 count = 0 则移除所有与 value 相等的值。

        lindex key index,根据下标(index)获取元素;

        lset key index value,根据下标(index)设置 key 的值;

        ltrim key start end,删除指定范围外的所有元素;

        linsert key BEFORE | AFTER pivot value,linsert 首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 BEFORE 还是 AFTER 来决定将value插入到该元素的前面还是后面;

        rpoplpush source destination,此命令会先从 source 列表类型键的右边弹出一个元素,然后将其加入到 destination 列表类型键的左边,并返回这个元素的值;

        brpop key [key ...] timeout,此命令是阻塞版的 rpop,有命令才会弹出,无命令将会阻塞,直到有命令弹出;

        blpop key [key ...] timeout,与 brpop 一样,不过是 左弹出;

    • 集合类型

        集合类型与列表类型相似,但是集合类型是无序的,并且集合类型内部实现方式是一个值为空的散列表实现的,所以效率极高。

        sadd key member [ member... ],向 key 中添加一个或多个元素;

        srem key member [ member... ],在 key 中删除指定的一个或多个元素;

        smembers key,获取集合中所有的元素;

        sismember key member,判断元素是否在集合中;

        sdiff key [ key... ],对多个集合进行差集运算;

        sinter key [ key... ],对多个集合进行交集运算;

        sunion key [ key... ],对多个集合进行并集运算;

        scard key,获取 key 中的元素个数;

        sdiffstore destination key [ key... ],与 sdiff 一样,只不过其可将结果存储到 destination 中;

        sinterstore destination key [ key... ],同 sdiffstore;

        sunionstore destination key [ key... ],同 sdiffstore;

        srandmember key [ count ],随机从集合中获取一个元素,如果 count 为正数时,则会随机从集合里获得 count 个不重复的元素,如果coun的值大于集合中的元素个数,则会返回集合中的全部元素。 如果 count 为负数时,则会随机从集合里获得 count 的绝对值的个数的元素,这些元素有可能相同;

        spop key,随机从集合中弹出一个元素。

         

    • 有序集合类型

        有序集合类型与集合类型一样,只不过是有序的。

        zadd key score member [ [score member]... ],将一个或多个元素及其 score 添加到有序集合中;

        zscore key member,获得有序集合中某个元素的 score 值;

        zrange key start stop [ WITHSCORES ],获得指定区间内的元素,使用 WITHSCORES 则会将 score 值一并返回,获得的元素从小到大排序;

        zrevrange key start stop [ WITHSCORES ],与 zrange 一样,不过此命令是从大到小排序;

        zrangebyscore key min max [ WITHSCORES ] [ LIMIT offset count ],根据指定范围的 score 值来返回元素,并可以使用 "(" 或 ")",表示不包含值,而 LIMIT 则在获得的元素基础上向后偏移 offset 个元素,并获取 count 个元素;

        zincrby key increment member,增加一个元素的 score 值;

        zcard key,获取集合中元素的数量;

        zcount key min max,获得指定 score 区间的元素个数;

        zrem key member [ member.... ],删除一个或多个元素;

        zremrangebyrank key start stop,删除指定排名区间内的所有元素;

        zremrangebyscore key min max,删除指定 score 区间内的所有元素;

        zrank key member,获得元素从小到大的排名;

        zrevrank key member,与 zrank 相反;

    事务

      Redis 的事务不支持回滚操作,当事务中有语法错误时,Redis 不会执行( Redis 可以检测出语法错误 ),但当事务中有运行时错误时,仍然会执行,这需要在开发时确保事务中的语句执行无错。

      Redis 执行事务时,即使此时有其他客户端连接并要执行命令,也不会干扰事务执行,等事务执行完成再执行新的命令。

      

      multi,开启事务,此后的命令不会立即执行,会先加入队列;

      exec,执行事务中的所有命令;

      watch key [ key.... ],监控一个或多个 key ,如果在事务执行之前监控的 key 被修改,则事务不会执行;

      unwatch,取消 watch 命令对所有被监控的 key,如果在执行 watch 后,exec 或 discard 命令先执行了的话,就不需要再执行 unwatch 了,因为 exec 会执行事务,因此 watch 命令的效果已经产生了,而 discard 在取消事务的同时也会取消所有对 key 的监控;

    对 key 操作的命令

      keys pattern,查找所有符合给定模式 pattern 的 key ;

      del key [key ...]删除给定的一个或多个 key ;

      type key返回 key 所储存的值的类型;

      expire key seconds,给给定 key 设定有效时间,当 key 过期时,key 会被删除。而当 key 在有效期内被重新 set 或 getset 则会清除此 key 的有效时间(重新变为持久),对值操作的命令不受影响,如:lpush、incr、hset等;

      ttl key,返回 key 的剩余时间,单位秒;

      persist key,取消 key 的有效时间,重新变为持久化;

      expireat key timestamp,与 expire 相同,不过此命令是设置 Unix 时间(以秒单位);

      pexpireat key milliseconds-timestamp,与 expireat 一样,不过此命令以毫秒为单位的 Unix 时间戳;

      sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination],返回或保存给定列表、集合、有序集合 key 中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较;

    发布/订阅

      订阅者可以订阅多个频道,而发布者可以向订阅者发布消息,并所有订阅者都会接收到。

      

      subscribe channel [channel ...]订阅给定的一个或多个频道的信息;

      publish channel message,将信息 message 发送到指定的频道 channel; 

      psubscribe pattern [pattern ...]订阅一个或多个符合给定模式的频道;

      unpsubscribe [channel [channel ...]],指示客户端退订给定的频道,如果没有指定频道则退订所有频道;

    提示

      更详细的命令解释请参考:http://doc.redisfans.com/

    参考

      http://doc.redisfans.com/

    Welcome to my blog!
  • 相关阅读:
    __autoload函数
    错误处理try catch
    PHP面向对象基础实例
    类的继承关系实例
    YII重点文件
    //计算今年月度利息和
    cookie保存分页参数
    win64(win8)的python拓展包安装经验总结
    matcom安装时无法寻找到matlab.exe的解决办法
    《人人都是产品经理》阅读笔记一
  • 原文地址:https://www.cnblogs.com/blogCblog/p/14910168.html
Copyright © 2020-2023  润新知