「进击Redis」九、Redis 全局键管理解析

前言

这是基础篇(对于好哥哥们来说都是简简单单的,对于我来讲还是有难度的)的最后一篇了,好哥哥们应该把基础的数据结构都掌握了吧。
有一说一,掌握这几个数据结构还是很有必要的,毕竟平时开发的时候用的最多的就是这些东西。后面会分享一些比较高级的东西,慢查询、Pipeline,只要你想的到的都会有(没有的可以留个言我偷偷的加进去),好哥哥们给我等着吧。
这篇的话就是关于对键(key)的管理(别想歪了,此键非彼 jian)。let's get it

嘻哈

概述

关于键管理将按照单个键、遍历键、数据库管理三个维度对一些通用命令进行介绍。在 Redis 系列第三篇 Reids 的数据结构、线程模型与全局命令 里面已经拿了一部分像 type、del、exists、expire 出来说了。其实还是挺简单的,好哥哥们动手操作起来。

1 单个键管理

1.1 键重命名

如果在 rename 之前,键 java 已经存在,那么它的值也将被覆盖。另外重命名键期间会执行 del 命令删除旧的键,如果键对应的值比较大,会存在阻塞 Redis 的可能性,好哥哥们不要忽略这个哦。

 ## 格式。如果在rename之前,键java已经存在,那么它的值也将被覆盖
 rename key newkey
 ## 将php键名称改成java
 rename php java
 ## 格式。 为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey,不存在时候才被覆盖
 renamenx key newkey

1.2 随机返回一个键

 ## 格式。随机返回数据库中的一个键
 randomkey

1.3 键过期

需要注意的是:

  1. 如果过期时间为负值,键会立即被删除,犹如使用 del 命令一样
  2. 对于字符串类型键,执行 set 命令会去掉过期时间。
  3. Redis 不支持二级数据结构(例如哈希、列表)内部元素的过期功能,例如不能对列表类型的一个元素做过期时间设置。
  4. setex 命令作为 set+expire 的组合,不但是原子执行,同时减少了一次网络通讯的时间
 ## 格式。这个在第三篇已经说了,就给个格式吧。键在seconds秒后过期
 expire key seconds
 ## 格式。键在秒级时间戳timestamp后过期。
 expireat key timestamp

1.4 内部数据迁移

 ## 格式。Redis还是那一台,只是数据库换了(Redis不是默认区分了16个db吗),不建议在生产上使用
 move key db
 ## 将test 转移到第二个库
 move test 2

1.5 跨库迁移-dump 与 restore

注意点:

  1. 整个迁移过程并非原子性的,而是通过客户端分步完成的。
  2. 迁移过程是开启了两个客户端连接,所以 dump 的结果不是在源 Redis 和目标 Redis 之间进行传输。


    步骤
 ## 格式。实际上拆分成了两个步骤
 ## 1.把对应key dump下来,格式采用的是RDB格式
 dump key
 ## 2.restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,如果ttl=0代表没有过期时间。
 restore key ttl value
 ## 在源Redis将test以RDB格式dump下来,会返回一个文件如\x00\x05world\x06\x00\x8f<T\x04%\xfcNQ
 dump test
 ## 在新的目标数据库重新加载test
 restore test 0 x00\x05world\x06\x00\x8f<T\x04%\xfcNQ

1.6 跨库迁移-migrate

migrate 命令就是将 dump、restore、del 三个命令进行组合,从而简化了操作流程。另外 migrate 命令具有原子性,而且从 Redis3.0.6 版本以后已经支持迁移多个键的功能,有效地提高了迁移效率,migrate 在 10.4 节水平扩容中起到重要作用。
注意点:

  1. 整个过程是原子执行的,不需要在多个 Redis 实例上开启客户端的,只需要在源 Redis 上执行 migrate 命令即可。
  2. migrate 命令的数据传输直接在源 Redis 和目标 Redis 上完成的。
  3. 目标 Redis 完成 restore 后会发送 OK 给源 Redis,源 Redis 接收后会根据 migrate 对应的选项来决定是否在源 Redis 上删除对应的键。

参数:

  1. host:目标 Redis 的 IP 地址。
  2. port:目标 Redis 的端口。
  3. key|"":在 Redis3.0.6 版本之前,migrate 只支持迁移一个键,所以此处是要迁移的键,但 Redis3.0.6 版本之后支持迁移多个键,如果当前需要迁移多个键,此处为空字符串""。
  4. destination-db:目标 Redis 的数据库索引,例如要迁移到 0 号数据库,这里就写 0。
  5. timeout:迁移的超时时间(单位为毫秒)。
  6. [copy]:如果添加此选项,迁移后并不删除源键。
  7. [replace]:如果添加此选项,migrate 不管目标 Redis 是否存在该键都会正常迁移进行数据覆盖。
  8. [keys key[key...]]:迁移多个键,例如要迁移 key1、key2、key3,此处填写“keys key1 key2 key3”。
 ## 格式。直接一条命令,一看就是给萌男用的
migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key
 ## 将test 转移到第二个库并且替换新库值
 migrate 127.0.0.1 6379 test 2 1000 replace

1.7 move、dump+restore、migrate 对比

放一张猛男看的懂图片


对比

2 键遍历

2.1 全量遍历键

 ## 格式。pattern是一个通配符,举个栗子好哥哥们就知道了。同样不建议使用这个命令,如果存在大量key是就会阻塞Redis
 keys pattern
 ## 查找java开头的key
 keys java*

2.2 渐进式遍历

scan 采用渐进式遍历的方式来解决 keys 命令可能带来的阻塞问题,每次 scan 命令的时间复杂度是 O(1),但是要真正实现 keys 的功能,需要执行多次 scan。还提供了像 hgetall、smembers、zrange 可能产生的阻塞问题,对应的命令分别是 hscan、sscan、zscan。需要注意的是使用 scan 可能会出现新增的键可能没有遍历到,遍历出了重复的键等情况。

参数:

  1. cursor 是必需参数,实际上 cursor 是一个游标,第一次遍历从 0 开始,每次 scan 遍历完都会返回当前游标的值,直到游标值为 0,表示遍历结束。
  2. match pattern 是可选参数,它的作用的是做模式的匹配,这点和 keys 的模式匹配很像。
  3. count number 是可选参数,它的作用是表明每次要遍历的键个数,默认值是 10,此参数可以适当增大
 ## 格式。参数见上
 scan cursor [match pattern] [count number]
 ## 查找java开头的key
 scan 10 java*

3 数据库管理

3.1 切换数据库

 ## 格式。Redis 数据库默认是0-15
 select dbIndex
 ## 切换到第三个库
 select 2

3.1 清除数据库

 ## 格式。清除当前库
 flushdb
 ## 格式。清除所有库。真.删库跑路(好哥哥们可别再生产完)
 flushall

本期就到这啦,有不对的地方欢迎好哥哥们评论区留言,另外\color{#FF0000}{求关注、求点赞}

下一篇:Redis 慢查询了解一下
上一篇:Redis Sorted Set运用场景、API解析

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

推荐阅读更多精彩内容