Redis常用五大类型(操作命令)

149 阅读7分钟

Redis常用五大类型(操作命令)

redis操作命令

Redis键(keys)

  • keys * 查看当前库所有key (匹配:keys *param,*类似于展位符号)
  • exists key 判断某个key是否存在
  • type key 查看你的key是什么类型
  • rename key newkey 将一个key重新命名,newkey存在会覆盖
  • renamenx key newkey 当且仅当 newkey 不存在时,将 key 改名为 newkey
  • del key 删除指定的key数据
  • move key db 将当前数据库的 key 移动到给定的数据库 db 当中
  • unlink key 根据value选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
  • expire key 10 为给定的key设置过期时间(expire 秒,pexpire 毫秒)
  • ttl key 查看还有多少时间过期,-1表示永不过期,-2表示已过期 (ttl 秒,pttl 毫秒)
  • persist key 移除给定key的生存时间。当生存时间移除成功时,返回 1 .如果 key 不存在或 key 没有设置生存时间,返回 0
  • select 命令切换数据库
  • dbsize 查看当前数据库的key的数量
  • flushdb 清空当前库
  • flushall 通杀全部库

Redis字符串(String)

  • set key value [EX seconds] [PX milliseconds] [NX|XX] 将键key设定为指定的“字符串”值。

    • EX seconds – 设置键key的过期时间,单位时秒
    • PX milliseconds – 设置键key的过期时间,单位时毫秒
    • NX – 只有键key不存在的时候才会设置key的值
    • XX – 只有键key存在的时候才会设置key的值
  • SETRANGE key offset value

    • 这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。如果offset比当前key对应string还要长,还是在key的末尾追加。不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串,能在offset处设置value。
  • get key

    • 返回key的value。如果key不存在,返回特殊值nil。如果ke的value不是string,就返回错误,因为GET只处理string类型的values。
  • GETSET key value

    • 自动将key对应到value并且返回原来key对应的value。如果key存在但是对应的value不是字符串,就返回错误。
  • MSET key value [key value ...]

    • 对应给定的keys到他们相应的values上。MSET会用新的value替换已经存在的value,就像普通的SET命令一样。
  • MSETNX key value [key value ...]

    • 对应给定的keys到他们相应的values上。只要有一个key已经存在,MSETNX一个操作都不会执行。
  • MGET key [key ...]

    • 返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil。正因为此,这个操作从来不会失败。
  • APPEND key value

    • 如果 key 已经存在,并且值为字符串,那么这个命令会把 value追加到原来值(value)的结尾。 如果 key不存在,那么它将首先创建一个空字符串的key,再执行追加操作。
  • key的自增自减(原子性)

    • DECR key 对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。
    • DECRBY key decrement
    • INCR key
    • INCRBY key increment
    • INCRBYFLOAT key increment

Redis列表(List)

  • LPUSH/RPUSH key value [value ...]

    • 将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。
  • LPUSHX/RPUSHX key value

    • 只有当 key 已经存在并且存着一个 list 的时候,在这个 key 下面的 list 的头部插入 value。 与 LPUSH 相反,当 key 不存在的时候不会进行任何操作。
  • LINSERT key BEFORE|AFTER pivot value

    • 把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。当 key 存在,但保存的不是一个list的时候,会返回error。
  • LPOP/RPOP key

    • 移除并且返回 key 对应的 list 的第一个元素。
  • RPOPLPUSH source destination

    • 原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)。

      例如:假设 source 存储着列表 a,b,c, destination存储着列表 x,y,z。 执行 RPOPLPUSH 得到的结果是 source 保存着列表 a,b ,而 destination 保存着列表 c,x,y,z。

      如果 source 不存在,那么会返回 nil 值,并且不会执行任何操作。 如果 source 和 destination 是同样的,那么这个操作等同于移除列表最后一个元素并且把该元素放在列表头部, 所以这个命令也可以当作是一个旋转列表的命令。

  • LINDEX key index

    • 返回列表里的元素的索引 index 存储在 key 里面。 下标是从0开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。

      当 key 位置的值不是一个列表的时候,会返回一个error。

  • LLEN key 返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。 当存储在 key 里的值不是一个list的话,会返回error。

  • LRANGE key start stop

    • 返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。

      偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。

  • LREM key count value

    • 从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作:

      • count > 0: 从头往尾移除值为 value 的元素。
      • count < 0: 从尾往头移除值为 value 的元素。
      • count = 0: 移除所有值为 value 的元素。
    • 比如, LREM list -2 “hello” 会从存于 list 的列表里移除最后两个出现的 “hello”。需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。

  • LSET key index value

    • 设置 index 位置的list元素的值为 value。
  • LTRIM key start stop

    • 修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。start 和 stop 都是由0开始计数的, 这里的 0 是列表里的第一个元素(表头),1 是第二个元素,以此类推。
  • BLPOP/BRPOP key [key ...] timeout详细说明

  • BRPOPLPUSH source destination timeout

    • BRPOPLPUSHRPOPLPUSH 的阻塞版本。 当 source 包含元素的时候,这个命令表现得跟 RPOPLPUSH 一模一样。 当 source 是空的时候,Redis将会阻塞这个连接,直到另一个客户端 push 元素进入或者达到 timeout 时限。 timeout 为 0 能用于无限期阻塞客户端。

Redis集合(Set)

  • SADD

    • 将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
  • *SMEMBERS *取出该集合的所有值。

  • SISMEMBER 判断集合是否为含有该值,有1,没有0

  • *SCARD *返回该集合的元素个数。

  • SREM 删除集合中的某个元素。

  • SPOP 随机从该集合中吐出一个值。

  • SRANDMEMBER 随机从该集合中取出n个值。不会从集合中删除 。

  • SMOVE value 把集合中一个值从一个集合移动到另一个集合

  • SINTER 返回两个集合的交集元素。

  • SUNION 返回两个集合的并集元素。

  • SDIFF 返回两个集合的差集元素(key1中的,不包含key2中的)

Redis哈希(Hash)

  • *HSET *给集合中的 键赋值
  • *HGET *从集合取出 value
  • *HMSET *批量设置hash的值
  • *HEXISTS *查看哈希表 key 中,给定域 field 是否存在。
  • *HKEYS *列出该hash集合的所有field
  • *HVALS *列出该hash集合的所有value
  • *HINCRBY *为哈希表 key 中的域 field 的值加上增量 1 -1
  • *HSETNX *将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .

Redis有序集合(Zset)

  • *ZADD …*将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
  • ZRANGE [WITHSCORES] 返回有序集 key 中,下标在之间的元素带WITHSCORES,可以让分数一起和值返回到结果集。
  • ZRANGEBYSCORE key minmax [withscores] [limit offset count] 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
  • zrevrangebyscore key maxmin [withscores] [limit offset count] 同上,改为从大到小排
  • ZINCRBY 为元素的score加上增量
  • *ZREM *删除该集合下,指定值的元素
  • *ZCOUNT *统计该集合,分数区间内的元素个数
  • *ZRANK *返回该值在集合中的排名,从0开始。