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

34 篇文章 5 订阅

前言

这是基础篇(对于好哥哥们来说都是简简单单的,对于我来讲还是有难度的)的最后一篇了,好哥哥们应该把基础的数据结构都掌握了吧。
有一说一,掌握这几个数据结构还是很有必要的,毕竟平时开发的时候用的最多的就是这些东西。后面会分享一些比较高级的东西,慢查询、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解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值