Redis键管理

在之前的文章中我们已经介绍过了Redis中有关键的命令,在一篇中我们将详细了解一下这方面的内容。除此之外在这一篇中我们还将了解Redis中的数据库相关的管理。下面我们将分3个部分来介绍Redis键管理方面的知识。它们分别是单个键、遍历键、数据库管理等。


单个键管理

1.键重命名

rename key newkey

我们看rename命令确实是可以给键重命名,但如果执行rename命令时新的键已经存在的,那么rename命令会将新的键的键的值替换掉。也就是如下图所示:

当然既然使用rename命令是有风险的,所以Redis为了保证给键重命名的安全性于是提供了renamenx命令,顾名思义,renamenx命令就是保证当前新的键不存在时,给键重命名命令才可以成功。

如上图所示,当renamenx命令给键重命名时,如果重命名的键是存在的,则renamenx命令返回0,表示当前命令执行失败,否则返回1,则表示成功。

下面我们了解一下在使用rename命令或者renamenx命令时的注意事项。

  • 由于在使用rename命令或者renamenx命令时会执行del命令删除旧的键,所以如果旧的键中的值比较大时,可能会存在阻塞的情况。
  • 如果在使用rename命令或者renamenx命令时,如果新的键与旧的键是相同时,则上述命令时可以执行成功的,但在Redis3.2之前版本会报错。

2.随机返回一个键

randomkey

3.键过期

expire key seconds
expireat key timestamp

ttl命令和pttl命令都可以查询键的剩余过期时间,但是pttl命令精度更高可以支持毫秒级。下面我们看一下ttl命令和pttl命令的返回值。

  • 大于等于0的整数:键剩余的过期时间(ttl秒,pttl毫秒)。
  • -1:键没有设置过期时间
  • -2:键不存在

下面我们看一下expireat命令。

expireat命令可以直接设置键的毫秒过期时间戳。除此之外Redis2.6版本之后还支持了毫秒级的过期时间。

pexpire key milliseconds
pexpireat key milliseconds-timestamp

下面我们介绍一下在使用上述命令时的注意事项。

  • 如使用上述命令时如果键不存在时,则直接返回0,表示该操作执行失败。
  • 如果使用上述命令时过期时间设置为负数,则当前键直接过期,并且会直接删除,相当于执行del命令。
  • persist命令可以将键的过期时间清除。
  • 对于字符串类型的键,在执行set命令时,会默认去掉过期时间,在这点要特别注意,很容易忽视。
  • Redis不支持二级数据结构内部元素的过期功能,例如不能设置列表或者集合类型中的某个元素设置过期时间。
  • setnx命令作为set + expire组合,不但是原子性的,同时还减少了一次网络通讯时间。

4.迁移键 顾名思义迁移键就是将键从一个地方迁移到另一个地方。比如将键从生产环境迁移到测试环境等等。在Redis中提供了3种方式来支持键的迁移功能,它们分别是move、dump + restore、migrate3种。但它们的底层实现方式,及使用场景均不太一样。下面我们详细了解一下。

(1)、move

move key db

move命令是在Redis的内部进行数据迁移,在Redis中实际上有多个数据库的,所以move命令就是将指定的键从源数据库移动目标数据库中。Redis中数据库相关的知识,我们将在后续的文章中在做介绍。


(2)、dump + restore

dump key
restore key ttl serialized-value [REPLACE]

dump + restore也可以实现Redis中不同实例之间的数据迁移。但和move命令不同dump + restore要分2部实现,下面我们详细了解一下。

  • 在源数据库上使用dump命令将键值序列化,格式采用的是RDB格式。
  • 在目标数据库中使用restore命令将上一步中的序列化的值进行复原,其中ttl参数表示过期时间,如果ttl等于0则表示没有过期时间。

下面我们看一下dump + restore方式的注意事项。

  • 整个迁移的过程中并非原子性的,而是通过客户端分步完成的。
  • 迁移的过程中是在两个客户端进行的,所以dump的结果不是在源数据库和目标数据库之间进行的。

下面我们完整演示一下使用dump + restore命令怎么迁移键。

1)、在源Redis中执行dump。

2)、在目标Redis中执行restore。

我们上述操作中启用了2个客户端,一个端口为6379另一个端口为6380。如果在使用dump和restore命令时,如果都在同一个端口客户端中进行时,Redis会返回错误。


(3)、migrate

migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]

在Redis中migrate命令也可以实现键的迁移功能,它和上述的其它迁移命令相比,不同的就是migrate命令就是将dump、restore、del命令组合在了一起,并且简化了操作流程。而且migrate命令还支持原子性操作。下面我们看一下使用migrate命令与dump + restore命令之间的不同之处。

  • migrate命令整个过程都是原子性的,并且不需要开启多个Redis客户端。
  • migrate命令的数据传输直接在源Redis和目标Redis中完成。
  • 目标Redis完成restore后会发送OK给源Redis,源Redis接受后会根据migrate对应的选项来决定是否在源Redis上删除对应的键。

下面我们详细看一下migrate命令的相关参数。

- host:目标Redis的IP地址。
- port:目标Redis的端口。
- key|"":在Redis3.0.6版本之前,migrate只支持迁移一个键,所以此处就是要迁移的键,但Redis3.0.6版本之后是可以支持迁移多个键了,所以如果当前要迁移多个键时,此处为空字符串“”。
- destination-db:目标Redis的数据库索引,因为上面提到过在Redis是有多个数据库存在的,但相关的知识后续在做详细介绍,这里我们只要先知道这个概念就可以了。
- timeout:键迁移的超市时间(单位毫秒)。
- [copy]:如果添加此选项,迁移后并不删除源键。
- [replace]:如果添加此选项,migrate不管目标Redis是否存在该键都会进行数据迁移,并且覆盖。
- [keys key [key ...]]:迁移多个键,迁移多少,就写多少键。

下面我们演示一下通过migrate命令怎么迁移Redis中的键。 1)、源Redis有要迁移的键,而目标Redis中没有: 下面我们执行以下命令:

migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]

在使用migrate命令迁移键时,有一点要特别注意,就是migrate命令在执行时,要在源Redis中执行,如果在目标Redis中执行时,是不会迁移成功的,也就是如上图所示。


2)、源Redis和目标Redis都有要迁移的键。 在使用migrate命令迁移键时如果没有添加replace参数时,则Redis会显示错误,并且如果不添加copy命令时,当键成功迁移后,源Redis中的迁移键,将被删除。


3)、源Redis中没有要迁移的键。


下面我们演示一下批量迁移多个键的操作:


下面我们来比对一下上述3种键迁移的不同。

本文分享自微信公众号 - 吉林乌拉(jilinwulacom)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis地理信息定位GEO

    Redis提供了GEO功能,也就是地理信息定位功能。通过Redis中的GEO功能,我们可以很方便的通过经纬度来计算两个地理位置之间的距离。所以我们在实际的开发中...

    吉林乌拉
  • Redis中的事务管理

    在之前的文章中我们已经介绍了很多关于Redis中的命令,虽然命令的执行是原子性的,但是如果多条命令组合在一起则Redis就不能保证组合命令的原子性了。并且如果我...

    吉林乌拉
  • Redis字符串类型

    从今天开始我将重点分享一下Redis中的5种数据结构,今天我们学习一下第一种数据结构字符串。字符串是Redis中的最基础的数据结构。我们保存到Redis中的ke...

    吉林乌拉
  • Redis linux下安装配置 原

    make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-sta...

    尚浩宇
  • Webcontent path的determine逻辑

    看standard application,读取eclipse配置文件也失败,因此使用default web content:

    Jerry Wang
  • macOS平台下虚拟摄像头的研发总结

    一、背景介绍     虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用。当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价...

    24K纯开源
  • 原 数据结构-二叉搜索树(Binary S

    不高不富不帅的陈政_
  • python代码

    py3study
  • 牛逼了!Python代码补全利器,提高效率告别996!

    Kite is a plugin for your IDE that uses machine learning to give you useful code...

    用户2769421
  • DAO理念的深刻理解

    在传统金融领域,主要的发展方向是以更快的价值流动速度、更大的流动范围以及更具穿透力的风险评估办法,而区块链技术可以完全升级改造传统金融的发展方向。

    用户6296524

扫码关注云+社区

领取腾讯云代金券