redis Key命令

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容