zoukankan      html  css  js  c++  java
  • Redis 常用数据结构及其控制命令整合

    Redis 键值支持5种基本结构,分别是字符串,列表,哈希,集合,有序集合。每一种数据结构都有对应的取值和设值命令,辅助命令,除此之外,还有一些全局命令,用来管理Redis存储的所有键。


    全局命令 

    针对Redis实例中的所有键的操作

    查看所有键

    keys *

    127.0.0.1:6379> keys *
    1) "name"
    2) "fuck"
    3) "mlist"
    4) "dict:test"
    5) "fuck1"
    6) "hello"
    7) "mset"
    8) "fuck2"

    >> keys 会遍历所有键,当Redis存储大量键时,容易阻塞Redis的单线程运行,慎用。  

     

    查看键总数

    dbsize

    127.0.0.1:6379> dbsize
    (integer) 8

    >> dbsize在计算键总数的事件复杂度是O(1), dbsize不会像keys命令会去遍历所有键,而是直接获取键总数变量。

    查看键是否存在

    exists key

      如果键存在则返回1,不存在返回0

    127.0.0.1:6379> exists name
    (integer) 1
    127.0.0.1:6379> get name
    "lyh"
    127.0.0.1:6379> exists sdf
    (integer) 0

     

    删除键

    del key [key ...]

          >> del 可以删除任意数据结构的键,可以同时将多个以空格分隔的键同时删除

       >> 操作成功返回1,否则返回0

    127.0.0.1:6379> exists name
    (integer) 1
    127.0.0.1:6379> get name
    "lyh"
    127.0.0.1:6379> del name
    (integer) 1
    127.0.0.1:6379> exists name
    (integer) 0

     

    键过期

    expire key seconds

    127.0.0.1:6379> set name lyh
    OK
    127.0.0.1:6379> exists name
    (integer) 1 
    127.0.0.1:6379> expire name 10
    (integer) 1   # 设置成功,返回1

    查看键过期时间

    ttl key

      >> ttl 命令有三种返回值

      >> 大于等于0的整数表示键剩余的过期时间

      >> -1时表示键没有设置过期时间

      >>-2时表示键不存在

    127.0.0.1:6379> ttl name
    (integer) 2  #
    127.0.0.1:6379> ttl name
    (integer) 1
    127.0.0.1:6379> ttl name
    (integer) 0
    127.0.0.1:6379> ttl name
    (integer) -2

    查看键的数据

    type key

    127.0.0.1:6379> set is:str str
    OK
    127.0.0.1:6379> rpush is:list 2 a dfdf fdf
    (integer) 4
    127.0.0.1:6379> sadd is:set 1 1 3 3
    (integer) 2
    127.0.0.1:6379> hmset is:hash key1 1 key2 2
    OK
    127.0.0.1:6379> type is:str
    string
    127.0.0.1:6379> type is:set
    set
    127.0.0.1:6379> type is:hash
    hash

    如果键不存在,则返回none

      


     

    字符串

      Redis的键都是字符串类型,只有键对应的值可以是多种数据结构的。另外,字符串的值除了可以是字符串(简单的字符串,复杂的字符串,如JSON,XML),数字,

      甚至是二进制(图片,音频,视频),但是值最大不能超过512M。

      

    常用命令

      设置值

      set key value [ex seconds] [px milliseconds] [nx|xx]

       >> ex seconds 为键设置秒级过期时间

       >> px milliseconds 为键设置毫秒级过期时间

       >> nx 键不存在才可以设置成功,用于添加

       >> xx 键存在才可以设置成功,用于更新

      另外,Redis还提供了setex和setnx,作用和ex,nx选项是一样的。

     

    获取值

      get key 

      >> 如果要获取的键不存在,则返回nil

      

    批量设置值

     mset key value [ key value ...]

    批量获取值 

     mget key [key ...]

     

    计数

    incr key

           >> incr命令用于对值做自增操作,返回结果有三种情况

                >> 值不是整数,返回错误

                >> 值是整数,返回自增后的结果

                >> 键不存在,按照值为0自增,返回结果为1

                  对一个不在的键执行incr: 

    127.0.0.1:6379> exists not:exists
    (integer) 0
    127.0.0.1:6379> incr not:exists
    (integer) 1

        如果值不是整数,返回错误

    127.0.0.1:6379> set notint notint
    OK
    127.0.0.1:6379> incr notint
    (error) ERR value is not an integer or out of range

     

    其他不常用命令

    追加值到已有值后边

    append key value 

    获取字符串长度

    strlen key

    设置并返回原值

    getset key value

    设置指定位置的字符

    setrange key offset value

    获取部分字符串

    getrange key start end

      


     

    哈希 

    也可以叫做字典,关联数组。在Redis中,哈希类型是指键值本身又是一个键值对结构。

    常用命令

      设置值

      hset key  field value

      >>成功返回1,失败返回0

         >>Redis 同时提供了hsetnx,当要设置的哈希不在时,才可以设置

      获取值

      hget key field

      >>键不存在返回nil

      删除键

      hdel key field [field ...]

      >>hdel可以删除一个或多个field,返回结果为成功删除field的个数

      计算哈希内部field个数

      hlen key

      批量设置或获取

      hmget key field [field ...]

      hmset key field value [field value...]

           判读是否存在指定field

      hexists key field

           获取所有field

      hkeys key  

    获取所有value

      hvals key

    获取所有field-value

    hgetall key

     

    递增哈希的field

    hincrby key field

    hincrbyfloat key field

    >>hincrby 和 hincrbyfloat,就像incrby和incrbyfloat命令一样,但是他们的作用域是field

     

      计算value的字符串长度(需要Redis3.2以上)

      hstrlen key field

     


     

     列表

     列表中的元素是有序的,可通过索引下标获取某个元素或者某个范围内的元素列表;列表中的元素可以是重复的。

     

    列表的四种操作

    +----------------------------------------------------+

    |   操作类型 |                    操作                   |

    |   添加        |   rpush lpush linsert              |

    |   查            |   lrange lindex llen                |

    |   删除        |   lpop rpop ltrim  lrem            |

    |   修改        |   lset                                      |

    |   阻塞操作 |  blpop brpop                         |

     

    常用命令

      从右边添加元素至列表

      rpush key value [value ...]

    127.0.0.1:6379> rpush mlist 1 a b a fdfd aa
    (integer) 13
    127.0.0.1:6379> lrange 0 -1
    (error) ERR wrong number of arguments for 'lrange' command
    127.0.0.1:6379> lrange mlist 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    7) "g"
    8) "1"
    9) "a"
    10) "b"
    11) "a"
    12) "fdfd"
    13) "aa"

     

      从左边添加元素至列表

      lpush key value [value ...]

        >> 使用方法和rpush相同,只不过从左侧插入

      向某个元素前或者后插入元素

      linsert key before|after pivot value

      >> linsert 命令会从列表中找到等于pivot的元素,在其前或者后插入一个新的元素value,返回值为当前列表长度

    127.0.0.1:6379> lrange mlist 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    7) "g"
    8) "1"
    9) "a"
    10) "b"
    11) "a"
    12) "fdfd"
    13) "aa"
    127.0.0.1:6379> linsert mlist before a z
    (integer) 14

     

    获取指定范围的列表元素

    lrange key start end

    >> 索引下标从左到右是0到N-1,从右到左是-1到-N,更重要的是,lrange中的end选项包含了自身,这和其他编程语言不包含end很不一样

     

    获取列表指定索引下标的元素

    lindex key index

     

    获取列表长度

    llen

     

    删除列表元素

    lrem key count value

    >> lrem会从列表中找到等于value的元素进行删除,根据count的不同分为三种情况

    >>count > 0;从左到右,删除最多count个元素

    >>count < 0;从右到左,删除count绝对值个元素

    >>count = 0;删除所有元素

     

    按照索引范围剪裁列表

    ltrim key start end

    127.0.0.1:6379> lrange mlist 0 -1
    1) "z"
    2) "a"
    3) "b"
    4) "c"
    5) "d"
    6) "e"
    7) "f"
    8) "g"
    9) "1"
    10) "a"
    11) "b"
    12) "a"
    13) "fdfd"
    14) "aa"
    127.0.0.1:6379> ltrim mlist 1 4
    OK
    127.0.0.1:6379> lrange mlist 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"

     

    修改指定索引下标的元素

    lset key index newValue

     

    阻塞操作

    阻塞式弹出 :blpop key [key ...] timeout; brpop key [key ...] timeout

    >> blpop和brpop是lpop和rpop的阻塞版本,它们除了弹出方向不同,使用方法一样。

    >> key [key ....] 多个列表的键

    >>timeout 阻塞时间,如果timeout=0,客户端会一直等待下去。 


    集合(set)

    可用来保存多个字符串元素。集合不允许有重复元素,并且集合中的元素是无序的,不能通过索引获取元素。

    常用命令

    集合内操作

      添加元素

      sadd key element [element ...]

    127.0.0.1:6379> exists firstset
    (integer) 0
    127.0.0.1:6379> sadd firstset my name is lyh
    (integer) 4

     

    获取所有集合元素

    smembers key

    127.0.0.1:6379> smembers firstset
    1) "name"
    2) "is"
    3) "lyh"
    4) "my"

    当集合元素过多时,使用smembers存在阻塞Redis的可能。

     

    删除元素

    srem key element [element ...]

    127.0.0.1:6379> srem firstset my
    (integer) 1

     

    判断元素是否在集合中

    sismember key element

    如果元素在集合中,返回1,否则返回0

    127.0.0.1:6379> sismember firstset my
    (integer) 0
    127.0.0.1:6379> sismember firstset lyh
    (integer) 1

     

     计算元素个数

    scard key

    127.0.0.1:6379> scard firstset
    (integer) 3

     

    随机从集合返回指定个数元素

    srandmember key [count]

    [count] 为可选参数,默认为1,该命令不会改变集合元素

    127.0.0.1:6379> srandmember firstset
    "lyh"
    127.0.0.1:6379> smembers firstset
    1) "name"
    2) "is"
    3) "lyh"
    127.0.0.1:6379> srandmember firstset 2
    1) "name"
    2) "lyh"
    127.0.0.1:6379> smembers firstset
    1) "name"
    2) "is"
    3) "lyh"

     

    从集合中随机弹出元素

    spop key 

    该命令会实际从集合中去除弹出的元素

    127.0.0.1:6379> smembers firstset
    1) "name"
    2) "is"
    3) "lyh"
    127.0.0.1:6379> spop firstset
    "name"
    127.0.0.1:6379> smembers firstset
    1) "is"
    2) "lyh"

     

    集合间操作

    提前设置两个集合:

    127.0.0.1:6379> sadd set:1 java python javascript
    (integer) 3
    127.0.0.1:6379> sadd set:2 python mysql redis javascript
    (integer) 4

     

      求集合交集

      sinter key [key ...

    127.0.0.1:6379> sinter set:1 set:2
    1) "javascript"
    2) "python"

         

      求集合的并集

      sunion key [key ...]

    127.0.0.1:6379> sunion set:1 set:2
    1) "python"
    2) "java"
    3) "javascript"
    4) "redis"
    5) "mysql"

     

    求集合的差集

    sdiff key [key ...]

    127.0.0.1:6379> sdiff set:1 set:2
    1) "java"
    127.0.0.1:6379> sdiff set:2 set:1
    1) "mysql"
    2) "redis"

           

           将交集,并集,差集的结果保存

      sinterstore target key [key ...]

           sunionstore target key [key ...]

      sdiffstore target key [key ...]

    127.0.0.1:6379> sdiffstore set:1:2:diff set:1 set:2
    (integer) 1
    127.0.0.1:6379> smembers set:1:2:diff
    1) "java"

          


    有序集合

    它保留了集合不能有重复成员的特性,但有序集合中的元素可以排序。比较特别的是,有序集合并不像列表那样采用索引下标作为排序依据,而是给每个元素设置一个分数作为排序的依据。不同元素的分数可以相同。有序集合可以应用于排行榜系统,社交等。

    常用命令

    集合内

      添加成员

      zadd key score member [score member ...]

      score必须是数字,否则会报错

    127.0.0.1:6379> zadd zset:1 99 math 100 english 98 art
    (integer) 3
    127.0.0.1:6379> zadd zset:1 name lyh
    (error) ERR value is not a valid float

    当首次添加member时,会返回成功添加的个数,而如果member已经存在,此时使用zadd命令,则会更新 member,返回值为0,表示没有添加新member

    127.0.0.1:6379> zadd zset:1 999.9999 lyh
    (integer) 1
    127.0.0.1:6379> zadd zset:1 100 lyh
    (integer) 0
    127.0.0.1:6379> zadd zset:1 100 lyh100
    (integer) 1
    127.0.0.1:6379> zscore zset:1 lyh
    "100"

    在redis 3.2版本以后,zadd命令添加了nx, xx, ch, incr 四个选项

    nx: member 必须不存在,才可以设置成功,用于添加。

    127.0.0.1:6379> zadd zset:1 nx 200 lyh100
    (integer) 0
    127.0.0.1:6379> zscore zset:1 lyh100
    "100"
    127.0.0.1:6379> zadd zset:1 nx 200 lyh200
    (integer) 1
    127.0.0.1:6379> zscore zset:1 lyh200
    "200"

    xx: member必须存在,才可以设置成功,用于更新。

    127.0.0.1:6379> zadd zset:1 xx 300 lyh300
    (integer) 0
    127.0.0.1:6379> zscore zset:1 lyh300
    (nil)
    127.0.0.1:6379> zadd zset:1 nx 200 lyh300
    (integer) 1
    127.0.0.1:6379> zscore zset:1 lyh300
    "200"
    127.0.0.1:6379> zadd zset:1 xx 300 lyh300
    (integer) 0
    127.0.0.1:6379> zscore zset:1 lyh300
    "300"

    ch: 返回此次操作后,有序集合元素和分数发生变化的个数

    incr: 对score做增加,相当于后面介绍的zincrby

    127.0.0.1:6379> zadd zset:1 incr 1 lyh300
    "301"
    127.0.0.1:6379> zscore zset:1 lyh300
    "301"
    127.0.0.1:6379> zadd zset:1 ch 300 lyh300
    (integer) 1
    127.0.0.1:6379> zscore zset:1 lyh300
    "300"

     

    计算成员个数

    zcard key

    127.0.0.1:6379> zscore zset:1 lyh300
    "300"
    127.0.0.1:6379> zcard zset:1
    (integer) 7

     

    计算某个成员的分数

    zscore key member

    127.0.0.1:6379> zscore zset:1 lyh300
    "300"

     

    计算成员的排名(排名从0开始计算)

    zrank key member

    zrevrank key member

    zrank 是分数从低到高排名,zrevrank反之。

    127.0.0.1:6379> zrank zset:1 lyh300
    (integer) 6
    127.0.0.1:6379> zrevrank zset:1 lyh300
    (integer) 0

     

    删除成员

    zrem key member [member ...]

    返回结果为成功删除的个数

    127.0.0.1:6379> zrem zset:1 lyh300
    (integer) 1
    127.0.0.1:6379> zrem zset:1 lyh300
    (integer) 0

     

    增加成员的分数

    zincrby key increment member

    127.0.0.1:6379> zincrby zset:1 88 lyh
    "188"

     

    返回指定排名范围的成员

    zrange key start end [withscores]

    zrevrange key start end [withscores]

    排名按照分值高低进行,zrange是从低到高返回,zrevrange反之。加上withscores选项,会同时返回成员的分数。

    127.0.0.1:6379> zrange zset:1 0 100
    1) "art"
    2) "math"
    3) "english"
    4) "lyh100"
    5) "lyh"
    6) "lyh200"
    127.0.0.1:6379> zrange zset:1 0 100 withscores
    1) "art"
    2) "98"
    3) "math"
    4) "99"
    5) "english"
    6) "100"
    7) "lyh100"
    8) "100"
    9) "lyh"
    10) "188"
    11) "lyh200"
    12) "200"
    127.0.0.1:6379> zrevrange zset:1 0 100 withscores
    1) "lyh200"
    2) "200"
    3) "lyh"
    4) "188"
    5) "lyh100"
    6) "100"
    7) "english"
    8) "100"
    9) "math"
    10) "99"
    11) "art"
    12) "98"

      

      返回指定分数范围的成员

      zrangebyscore key min max [withscores] [limit offset count]

      zrevrangebyscore key min max [withscores] [limit offset count]

      zrangebyscore 按照分数从低到高返回,zrevrangebyscore反之。withscores选项会同时返回每个成员的个数。[limit offset count]选项可以限制输出的起始位置和个数。

    127.0.0.1:6379> zrangebyscore zset:1 0 100 withscores
    1) "art"
    2) "98"
    3) "math"
    4) "99"
    5) "english"
    6) "100"
    7) "lyh100"
    8) "100"
    127.0.0.1:6379> zrangebyscore zset:1 0 100 withscores limit 1 1
    1) "math"
    2) "99"
    127.0.0.1:6379> zrangebyscore zset:1 0 100 withscores limit 0 1
    1) "art"
    2) "98"
    127.0.0.1:6379> zrangebyscore zset:1 0 100 withscores limit 0 2
    1) "art"
    2) "98"
    3) "math"
    4) "99"

    min和max还支持开区间(小括号)和闭区间(中括号),-inf 和 +inf分别代表无限小和无限大。

    127.0.0.1:6379> zrangebyscore zset:1 (88 +inf withscores
    1) "art"
    2) "98"
    3) "math"
    4) "99"
    5) "english"
    6) "100"
    7) "lyh100"
    8) "100"
    9) "lyh"
    10) "188"
    11) "lyh200"
    12) "200"
    127.0.0.1:6379> zrangebyscore zset:1 [88 +inf withscores
    (error) ERR min or max is not a float

     

    返回指定分数范围成员个数

    zcount key min max

    127.0.0.1:6379> zcount zset:1 100 200
    (integer) 4

     

    删除指定排名内的升序元素

    zremrangebyrank key start end

    127.0.0.1:6379> zrangebyscore zset:1 -inf +inf
    1) "art"
    2) "math"
    3) "english"
    4) "lyh100"
    5) "lyh"
    6) "lyh200"
    127.0.0.1:6379> zremrangebyrank zset:1 0 1
    (integer) 2
    127.0.0.1:6379> zrangebyscore zset:1 -inf +inf
    1) "english"
    2) "lyh100"
    3) "lyh"
    4) "lyh200"

     

    删除指定分数范围的成员

    zremrangebyscores key min max

    127.0.0.1:6379> zrangebyscore zset:1 -inf +inf withscores
    1) "english"
    2) "100"
    3) "lyh100"
    4) "100"
    5) "lyh"
    6) "188"
    7) "lyh200"
    8) "200"
    127.0.0.1:6379> zremrangebyscore zset:1 100 199
    (integer) 3
    127.0.0.1:6379> zrangebyscore zset:1 -inf +inf withscores
    1) "lyh200"
    2) "200"

     

    集合间的操作

    首先准备两个有序集合

    127.0.0.1:6379> zadd zset:subject:1 8 english 12 chinese 11 c 20 python 30 redis
    (integer) 5
    127.0.0.1:6379> zadd zset:subject:2 88 english 120 chinese 119 c 200 python 300 redis
    (integer) 5

    127.0.0.1:6379> zrangebyscore zset:subject:1 -inf +inf withscores
    1) "english"
    2) "8"
    3) "c"
    4) "11"
    5) "chinese"
    6) "12"
    7) "python"
    8) "20"
    9) "redis"
    10) "30"
    127.0.0.1:6379> zrangebyscore zset:subject:2 -inf +inf withscores
    1) "english"
    2) "88"
    3) "c"
    4) "119"
    5) "chinese"
    6) "120"
    7) "python"
    8) "200"
    9) "redis"
    10) "300"

      交集

      zinterstore destination numkeys key [key ...]  [weights weight [weight ...]]  [aggregate sum|min|max]

      destination: 交集计算结果保存到这个键

      numkes: 需要做交集计算键的个数

      key [key ...] : 需要做交集计算的键

      weights weight [weight ...] : 每个键的权重,在做交集运算的时候,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1。

      aggergate sum|min|max : 计算成员交集后,分值可以按照sum(和),min(最小值),max(最大值)做汇总,默认值是sum。

      

    127.0.0.1:6379> ZINTERSTORE result:1 2 zset:subject:1 zset:subject:2
    (integer) 5
    127.0.0.1:6379> zrange result:1 0 -1 withscores
    1) "english"
    2) "96"
    3) "c"
    4) "130"
    5) "chinese"
    6) "132"
    7) "python"
    8) "220"
    9) "redis"
    10) "330"

    将第二个有序集合权重变为2,并且聚合效果采用max

    127.0.0.1:6379> ZINTERSTORE result:2 2 zset:subject:1 zset:subject:2 weights 1 2 aggregate max
    (integer) 5
    127.0.0.1:6379> zrange result:2 0 -1 withscores
    1) "english"
    2) "176"
    3) "c"
    4) "238"
    5) "chinese"
    6) "240"
    7) "python"
    8) "400"
    9) "redis"
    10) "600"

     

    并集

    zunionstore destination numkeys key [key ...]  [weights weight [weight ...]]  [aggregate sum|min|max]

    该命令参数和交集效果是一样的。

     


     

    键管理  

     

    单个键管理

      键重命名

      rename key newkey

      注意:如果newkey已存在,newkey原来的值会被覆盖

    127.0.0.1:6379> exists rename:test
    (integer) 0
    127.0.0.1:6379> set rename:test test
    OK
    127.0.0.1:6379> get rename:test
    "test"
    127.0.0.1:6379> rename rename:test rename:ok
    OK
    127.0.0.1:6379> get rename:test
    (nil)
    127.0.0.1:6379> get rename:ok
    "test"

     

    newkey不存在时,允许重命名键

    renamenx key newkey

    返回结果为0时代表没有完成重命名。

    127.0.0.1:6379> set rename:ok ok
    OK
    127.0.0.1:6379> set rename:notok notok
    OK
    127.0.0.1:6379> renamenx rename:notok rename:ok
    (integer) 0

    特别注意:如果重命名涉及到的键值比较大,而rename机制会执行del命令删除旧键,导致阻塞Redis

     

    随机返回一个键

    randomkey

    127.0.0.1:6379> randomkey
    "result:2"
    127.0.0.1:6379> randomkey
    "not:exists"
    127.0.0.1:6379> randomkey
    "fuck2"

     

    键过期

    设置键过期

    expire key seconds #键在seconds秒后过期删除

    expireat key timestamp #键在秒级时间戳后过期  如 >expireat hello 1469980800

    pexpire key millseconds #Redis 2.6之后,键在millseconds毫秒后过期

    pexpireat key millseconds-timestamp #Redis之后,键在毫秒级时间戳timestamp后过期

    有两点需要注意:

    1 如果expire key的键不存在,返回结果为0

    2 如果过期时间为负值,键会立即被删除,效果如同del命令一样

     

    查看键过期剩余时间
    ttl  #精度为秒

    pttl #精度为毫秒 

    ttl和pttl都可以查看键过期时间,返回值有以下三种情况

    1 返回大于等于0的整数,表示键剩余的过期时间(ttl是秒,pttl是毫秒)

    2 返回-1,表示键没有设置过期时间

    3 返回-2,表示键不存在

     

    清除键过期时间

    persist key

     

    另外,对于字符串类型键,执行set命令会去掉过期时间。

    127.0.0.1:6379> setex mykey 60 ok
    OK
    127.0.0.1:6379> get mykey
    "ok"
    127.0.0.1:6379> ttl mykey
    (integer) 50
    127.0.0.1:6379> ttl mykey
    (integer) 48
    127.0.0.1:6379> set mykey notok
    OK
    127.0.0.1:6379> ttl mykey
    (integer) -1

    Redis不支持二级数据结构(哈希,列表等)内部元素的过期功能,例如不能对列表类型的一个元素做过期时间设置。

    技巧,setex 可作为set + expire组合的替代,能以原子执行,并且减少一次网络通信的事件。

    SETEX key seconds value
    summary: Set the value and expiration of a key
    since: 2.0.0
    group: string

     

    迁移键

    迁移键功能实现将部分数据从一个Redis迁移到另一个Redis,Redis提供了move,dump+restore,migrate三组迁移键的方法。

    1 move key db

    Redis内部允许有多个数据库,彼此在数据上是相互隔离的,move key db就是把指定的键从源数据库移动到目标数据库中。仅支持同一个Redis实例内不同数据库的键进行迁移

    2 dump+restore

    该方式分为两步:

    dump key # 源Redis 上,dump命令会将键值序列化,格式采用的是RDB格式

    restore key ttl value #在目标Redis上,restore命令会将上面序列化的值进行复原,其中ttl参数代表过期时间,如果ttl=0代表没有过期时间

     

    127.0.0.1:6379> get mykey
    "notok"
    127.0.0.1:6379> dump mykey
    "x00x05notokx06x00"xc5dCxc7mxb5`"
    127.0.0.1:6379> select 1 # 切换到Redis数据库1
    OK
    127.0.0.1:6379[1]> restore key 0 "x00x05notokx06x00"xc5dCxc7mxb5`"
    OK
    127.0.0.1:6379[1]> get key
    "notok"

    3 migrate

    migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key ...]]

    host: 目标Redis的IP地址

    port: 目标Redis的端口

    key|"":在Redis 3.0.6版本之前,migrate只允许迁移一个键,key就代表了要迁移的键。在Redis3.0.6版本之后,允许迁移多个键,这里就为空字符串""

    destination-db:目标Redis的数据库索引,例如要迁移到0号数据库,这里就写0

    timeout:迁移的超时时间

    [copy]:表示迁移后并不删除源键

    [replace]:如果添加此选项,migrate不管目标Redis是否存在该键都会正常迁移进行数据覆盖

    [keys key [key ...] ]:迁移多个键,例如要迁移key1,key2,key3,此处应填写为"keys key1 key2 key3"

     

    127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
    OK
    127.0.0.1:6379> migrate 127.0.0.1 8000 "" 00 5000 keys k1 k2 k3
    OK
    127.0.0.1:6379>

    $ redis-cli -p 8000
    127.0.0.1:8000> mget k1 k2 k3
    1) "v1"
    2) "v2"
    3) "v3"
    127.0.0.1:8000>

    注意,migrate是原子操作的,不需要在多个Redis实例上开启客户端,只需要在源Redis上执行migrate命令即可。

     

    遍历键

      Redis提供了两个命令遍历所有的键,分别是keys和scan

      

    全量遍历键

    keys patterns

      keys支持pattern匹配

     

    127.0.0.1:8000> keys k*
    1) "k1"
    2) "k2"
    3) "k3"

    pattern使用glob风格的通配符:

    * 代表匹配任意字符

    ? 代表匹配一个字符

    [] 代表匹配部分字符,例如[1,3]代表匹配1,3,

    x 用来转义,如转义星号* ,转义问号?

    注意,key命令容易造成Redis阻塞,尤其在Redis包含了大量的键时。

     

    渐进式遍历

    scan cursor [match pattern] [count number]

    cursor:cursor是一个游标,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标的值为0,表示遍历结束。

    match pattern 是可选参数,作模式匹配,使用glob风格的通配符。

    count number是可选参数,表明每次要遍历的键的个数,默认值是10,此参数可以适当增大。

     

    127.0.0.1:8000> keys *
    1) "k1"
    2) "k2"
    3) "k3"
    127.0.0.1:8000> mset n1 v1 n2 v2 n3 v3
    OK
    127.0.0.1:8000> keys *
    1) "n3"
    2) "k1"
    3) "n2"
    4) "k3"
    5) "n1"
    6) "k2"
    127.0.0.1:8000> scan 0
    1) "0"
    2) 1) "n2"
    2) "k2"
    3) "n3"
    4) "k1"
    5) "n1"
    6) "k3"
    127.0.0.1:8000> scan 0 match n*
    1) "0"
    2) 1) "n2"
    2) "n3"
    3) "n1"
    127.0.0.1:8000> scan 0 match n* count 1
    1) "6"
    2) 1) "n2"

    注意:

    1 除了scan以外,Redis还提供了面向哈希类型,集合类型,有序集合的扫描遍历命令,分别是hscan,sscan,zscan,他们的用法和scan基本类似。

    2 scan并不能保证能够完整的遍历出来所有的键,因为scan过程中,Redis的键会发生增加或者删除。

     

    数据库管理

      Redis提供了dbsize,select,flushdb/flushall等命令用来操作数据库。

      dbsize

      返回当前数据库键的总数

      select dbIndex

      dbIndex :表示同一个Redis实例中不同的数据库,默认有16个

      

      flushdb/flushall

      以上两个命令都是用来清除数据库,flushdb只清除当前数据库,flushall会清除所有数据库。

  • 相关阅读:
    Eclipse设置打开的默认浏览器
    Java | 源文件
    博客园--个人博客背景设置
    MYSQL | 修改密码
    博客园首秀----Markdown
    Redis@Redis
    网络编程@Socket网络编程
    JVM@JVM基础
    并发编程@Disruptor并发框架
    并发编程@并发编程高级
  • 原文地址:https://www.cnblogs.com/linyihai/p/7430154.html
Copyright © 2011-2022 走看看