美文网首页
redis Key命令

redis Key命令

作者: 鬭闢 | 来源:发表于2017-04-26 11:27 被阅读0次

    1 keys

    返回满足给定 pattern 的所有 key

    *代表所有

    127.0.0.1:6379> keys *

    1) "zet"

    2) "set"

    3) "appToken"

    4) "email"

    5) "name"

    6) "list"

    7) "hash"

    127.0.0.1:6379> keys list*

    1) "list"

    2 exists

    确认一个 key 是否存在

    127.0.0.1:6379> exists email

    (integer) 1

    3 del

    删除一个 key

    127.0.0.1:6379> del email

    (integer) 1

    4 expire

    设置一个 key 的过期时间(单位:秒)

    127.0.0.1:6379> expire name 10

    (integer) 1

    ttl获取key有效时间负数说明已过期(取消expire时,ttl也为负)

    127.0.0.1:6379> ttl name

    (integer) 6

    127.0.0.1:6379> ttl name

    (integer) 4

    127.0.0.1:6379> ttl name

    (integer) -2

    5 move

    将当前数据库中的 key 转移到其它数据库中

    127.0.0.1:6379> select 0

    OK

    127.0.0.1:6379> set name wxc

    OK

    127.0.0.1:6379> get name

    "wxc"

    127.0.0.1:6379> move name 1

    (integer) 1

    127.0.0.1:6379> get name

    (nil)

    127.0.0.1:6379> select 1

    OK

    127.0.0.1:6379[1]> get name

    "wxc"

    6 persist

    移除给定 key 的过期时间

    127.0.0.1:6379[1]> expire name 20

    (integer) 1

    127.0.0.1:6379[1]> ttl name

    (integer) 15

    127.0.0.1:6379[1]> persist name

    (integer) 1

    127.0.0.1:6379[1]> ttl name

    (integer) -1

    127.0.0.1:6379[1]> get name

    "wxc"

    7 randomkey

    随机返回 key 空间的一个 key

    127.0.0.1:6379> randomkey

    "appToken"

    127.0.0.1:6379> randomkey

    "hash"

    8 rename

    127.0.0.1:6379[1]> set name wxc

    OK

    127.0.0.1:6379[1]> rename name myname

    OK

    127.0.0.1:6379[1]> keys *

    1) "myname"

    9 type

    127.0.0.1:6379> keys *

    1) "zet"

    2) "set"

    3) "appToken"

    4) "list"

    5) "hash"

    127.0.0.1:6379> type zet

    zset

    127.0.0.1:6379> type set

    set

    127.0.0.1:6379> type hash

    hash

    10 dump

    序列化给定key,并返回被序列化的值,使用RESTORE命令可以将这个值反序列化为 Redis 键。

    127.0.0.1:6379> set email wxc@126.com

    OK

    127.0.0.1:6379> dump email

    "\x00\x0bwxc@126.com\x06\x00\xd7\xf1hU\x0b,\x8cB"

    11 expireat

    expireat的作用和expire类似,都用于为key设置生存时间。不同在于expireat命令接受的时间参数是 UNIX 时间戳。

    12 migrate

    MIGRATE host port key destination-db timeout [COPY] [REPLACE]

    将key原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功,key保证会出现在目标实例上,而当前实例上的key会被删除。

    命令的内部实现是这样的:它在当前实例对给定key执行DUMP命令 ,将它序列化,然后传送到目标实例,目标实例再使用RESTORE对数据进行反序列化,并将反序列化所得的数据添加到数据库中;当前实例就像目标实例的客户端那样,只要看到RESTORE命令返回OK,它就会调用DEL删除自己数据库上的key。当IOERR出现时,有以下两种可能:key可能存在于两个实例;key可能只存在于当前实例.唯一不可能发生的情况就是丢失key,因此,如果一个客户端执行MIGRATE命令,并且不幸遇上。OERR错误,那么这个客户端唯一要做的就是检查自己数据库上的key是否已经被正确地删除。

    两个客户端 127.0.0.1:6379;127.0.0.1 7777

    127.0.0.1:6379> migrate 127.0.0.1 7777 name 0 1000

    OK 

    13 object

     允许从内部察看给定key的 Redis 对象。

    它通常用在除错(debugging)或者了解为了节省空间而对key使用特殊编码的情况。

    当将Redis用作缓存程序时,你也可以通过object命令中的信息,决定key的驱逐策略(eviction policies)。

    object 命令有多个子命令:

    object refcount <key>: 返回给定key引用所储存的值的次数。此命令主要用于除错。

    object encoding <key>:返回给定key所储存的值所使用的内部表示(representation)。

    object idletime <key>:返回给定key自储存以来的空闲时间(idle, 没有被读取也没有被写入),以秒为单位。

    对象可以以多种方式编码:

    字符串可以被编码为raw(一般字符串)或int(为了节约内存,Redis 会将字符串表示的 64 位有符号整数编码为整数来进行储存)。对于3.0及以上版本,字符串小于39字节编码格式为embstr,

    列表可以被编码为ziplist或linkedlist。ziplist是为节约大小较小的列表空间而作的特殊表示。

    集合可以被编码为intset或者hashtable。intset是只储存数字的小集合的特殊表示。

    哈希表可以编码为zipmap或者hashtable。zipmap是小哈希表的特殊表示。

    有序集合可以被编码为ziplist或者skiplist格式。ziplist用于表示小的有序集合,而skiplist则用于表示任何大小的有序集合。

    127.0.0.1:6379> set name wxc

    OK

    127.0.0.1:6379> object refcount name

    (integer) 1

    127.0.0.1:6379> object idletime name

    (integer) 34

    127.0.0.1:6379> get name

    "wxc"

    127.0.0.1:6379> object idletime name

    (integer) 2

    127.0.0.1:6379> object encoding name

    "embstr"

    14 pexpire

    这个命令和expire命令的作用类似,但是它以毫秒为单位设置key的生存时间,而不像expire命令那样,以秒为单位。相应的用PTTL命令查看其过期时间。

    15 pexpireat

    这个命令和expireat命令类似,但它以毫秒为单位设置key的过期 unix 时间戳,而不是像expireat那样,以秒为单位。

    16 renamenx

    当且仅当newkey不存在时,将key改名为newkey。

    当key不存在时,返回一个错误。

    127.0.0.1:6379> set name wxc

    OK

    127.0.0.1:6379> renamenx name myname

    (integer) 1

    127.0.0.1:6379> set name wxc

    OK

    127.0.0.1:6379> renamenx name myname

    (integer) 0

    17 restore

    反序列化给定的序列化值,并将它和给定的key关联。如果键key已经存在, 并且给定了REPLACE选项, 那么使用反序列化得出的值来代替键key原有的值; 相反地, 如果键key已经存在, 但是没有给定REPLACE选项, 那么命令返回一个错误。

    127.0.0.1:6379> restore email2 0  "\x00\x0bwxc@126.com\x06\x00\xd7\xf1hU\x0b,\x8cB"  replace

    OK

    127.0.0.1:6379> get email2

    "wxc@126.com"

    18 sort

    返回或保存给定列表、集合、有序集合key中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。

    一般 sort 用法

     最简单的sort使用方法是sort key和sort key DESC:

    127.0.0.1:6379> lpush numlist 32 45 3 46

    (integer) 4

    127.0.0.1:6379> sort numlist

    1) "3"

    2) "32"

    3) "45"

    4) "46"

    127.0.0.1:6379> sort numlist desc

    1) "46"

    2) "45"

    3) "32"

    4) "3"

    使用 alpha修饰符对字符串进行排序

    127.0.0.1:6379> lpush strlist wxcname

    (integer) 1

    127.0.0.1:6379> lpush strlist wxchome

    (integer) 2

    127.0.0.1:6379> lpush strlist wxcemail

    (integer) 3

    127.0.0.1:6379> sort strlist alpha

    1) "wxcemail"

    2) "wxchome"

    3) "wxcname"

    使用 LIMIT 修饰符限制返回结果

    排序之后返回元素的数量可以通过LIMIT修饰符进行限制, 修饰符接受offset和count两个参数:

    offset指定要跳过的元素数量。

    count指定跳过offset个指定的元素之后,要返回多少个对象。

    127.0.0.1:6379> rpush rank 2 4 7 8 4

    (integer) 5

    127.0.0.1:6379> rpush rank 9 6 1 5 7

    (integer) 10

    127.0.0.1:6379> sort rank limit 0 5

    1) "1"

    2) "2"

    3) "4"

    4) "4"

    5) "5"

    使用外部 key 进行排序

        by 选项[根据field2来排序field1】

               sort field1 by field2

        get 选项[根据field1排序再取出相应的field2]

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

               sort field1  get field2

        组合使用 by 和 get[根据field2排序field1再取出相应的field3】

               sort field1 by field2  get field3

         获取多个外部键

               sort field1  get field2 get field3

               get有一个额外的参数规则,那就是 —— 可以用#获取被排序键的值。

               sort field1  get # get field2 get field3[打印field1,field2,field3]

         获取外部键,但不进行排序

               通过将一个不存在的键作为参数传给by选项, 可以让sort跳过排序操作, 直接返回结果

               sort field by not-exists-key[返回结果不会排序]

               通过将这种用法和get选项配合, 就可以在不排序的情况下, 获取多个外部键, 相当于执行一个整合的获取操作(类似于 SQL 数据库的join关键字)。

                sort field1 by not-exists-key get # get field2 get field3[打印不排序的field1,field2,field3]

          将哈希表作为 GET 或 BY 的参数

                BY和GET选项都可以用key->field的格式来获取哈希表中的域的值, 其中key表示哈希表键,  而field则表示哈希表的域

                sort field1  by key->field get key->field2 get key->field3

      保存排序结果

                 默认情况下,sort操作只是简单地返回排序结果,并不进行任何保存操作。通过给store选项指定一个key参数,可以将排序结果保存到给定的键上。如果被指定的key已存在,那么原有的值将被排序结果覆盖。

               sort field store key[结果保存在key中]

    19 scan

    scan命令及其相关的sscan命令、hscan命令和zscan命令都用于增量地迭代一集元素:

    scan命令用于迭代当前数据库中的数据库键。

    sscan命令用于迭代集合键中的元素。

    hscan命令用于迭代哈希键中的键值对。

    zscan命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

    以上列出的四个命令都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像keys命令、smembers命令带来的问题 —— 当keys命令被用于处理一个大的数据库时, 又或者smembers命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。

    不过, 增量式迭代命令也不是没有缺点的: 举个例子, 使用smembers命令可以返回集合键当前包含的所有元素, 但是对于scan这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 。

    因为scansscanhscanzscan四个命令的工作方式都非常相似, 所以这个文档会一并介绍这四个命令, 但是要记住:

    sscanhscanzscan命令的第一个参数总是一个数据库键。

    而scan命令则不需要在第一个参数提供任何数据库键 —— 因为它迭代的是当前数据库中的所有数据库键。

    SCAN 命令的基本用法

    scan命令是一个基于游标的迭代器:scan命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为scan命令的游标参数, 以此来延续之前的迭代过程。

    scan命令的游标参数被设置为0时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为0的游标时, 表示迭代已结束。

    scan 0

    相关文章

      网友评论

          本文标题:redis Key命令

          本文链接:https://www.haomeiwen.com/subject/hflizttx.html