当前位置:网站首页>Redis学习笔记—单个键管理
Redis学习笔记—单个键管理
2022-06-23 09:00:00 【爱锅巴】
键重命名
rename key newkey
重命名键名“python”为“java”
127.0.0.1:6379> set python jedis
OK
127.0.0.1:6379> rename python java
OK
127.0.0.1:6379> get python
(nil)
127.0.0.1:6379> get java
"jedis"
如果原来的键存在,rename会覆盖原来的键的值
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> set c d
OK
127.0.0.1:6379> rename a c
OK
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> get c
"b"
为了防止强行覆盖Redis提供了renamenx命令
renamenx key newkey
举例说明
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> set c d
OK
127.0.0.1:6379> renamenx a c
(integer) 0
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> get c
"d"
127.0.0.1:6379> renamenx a e
(integer) 1
随机返回一个键
randomkey
随机返回键
127.0.0.1:6379> dbsize
(integer) 21
127.0.0.1:6379> randomkey
"user:ranking:2"
127.0.0.1:6379> randomkey
"java"
127.0.0.1:6379> randomkey
"user:2"
键过期
1.设置键过期
秒级:
expire key seconds
毫秒级:
pexpire key milliseconds
2.查看键的剩余过期时间
秒级别
ttl
毫秒级
pttl
- 大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)
- -1:键没有设置过期时间
- -2:键不存在。
设置键为“java”过期时间100秒
127.0.0.1:6379> expire java 100
(integer) 1
127.0.0.1:6379> pttl java
(integer) 95390
127.0.0.1:6379> ttl java
(integer) 89
3.键在时间戳timestamp后过期
秒级时间戳:
<pre>expireat key timestamp</pre>
毫秒级时间戳:
pexpireat key milliseconds-timestamp
设置键“hello”在2019-03-11 15:35:42过期(秒时间戳是1552289742,毫秒为1552289742000)
expireat hello 1552289742
4.清除键的过期时间
- persist 命令
persist key
- 字符串类型的key,直接set会清除key的过期时间
5.设置键值的同时添加过期时间
setex key seconds value
setex 不但是原子执行,同时减少了一次网络通讯的时间
迁移键
迁移键功能非常重要,因为有时候我们只想把部分数据由一个Redis迁移到另一个Redis(例如从生产环境迁移到测试环境),Redis发展历程中提供了move、dump+restore、migrate三组迁移键的方法,它们的实现方式以及使用的场景不太相同
- move
move key db
move命令用于在Redis内部进行数据迁移,Redis内部可以有多个数据库,彼此数据是相互隔离的,move就是从一个数据库移动到另外一个数据库
- dump+restore
dump key
restore key ttl value
dump+restore实现的是在不同Redis实例间进行数据迁移:
- 在源Redis实例上,dump命令会将键值序列化,格式采用的是RDB格式
- 在目标Redis上,restore命令将上面序列化的值进行复原,其中ttl为过期时间,如果ttl设置为0则代表没有过期时间
在主机1中对key的数据进行序列化,返回RDB格式的序列化value
127.0.0.1:6379> dump java
"\x00\x05jedis\t\x00b\xfc\b/\xf1'<)"
复制这个序列化的value,在主机2中restore迁移数据
127.0.0.1:6379> get java
(nil)
127.0.0.1:6379> restore java 0 "\x00\x05jedis\t\x00b\xfc\b/\xf1'<)"
OK
127.0.0.1:6379> get java
"jedis"
- migrate
migrate host port key|"" destination-db timeout [COPY] [REPLACE] [KEYS key]
- host:目标Redis的IP地址
- port:目标Redis的端口
- key:如果单个键就写键名,如果转移多个键此处就写双引号""空字符串(Redis3.0.6版本之后支持迁移多个键)
- destination-db:目标数据库的索引,如果是0号数据库就写0
- timeout:迁移的超时时间(毫秒)
- [copy]:如果添加此选项,迁移后并不删除源键
- [replace]:如果添加此选项,migrate不管目标Redis是否存在该键都会正常迁移进行数据覆盖
- [KEYS key]:迁移多个键,例如要迁移key1、key2、key3,此处填写“keys key1 key2 key3
mingrate实现的是在不同Redis实例间进行数据迁移,实际上migrate命令就是将dump、restore、del三个命令进行组合,从而简化了操作流程。
这个命令是一个原子操作,它在执行的时候会阻塞进行迁移的两个实例,直到以下任意结果发生:迁移成功,迁移失败,等到超时。
开另一个端口为6666的Redis实例
./redis-server --port 6666 &
redis-cli -h 127.0.0.1 -p 6666
127.0.0.1:6666> keys *
(empty list or set)
6379端口实例进行migrate的copy操作
127.0.0.1:6379> migrate 127.0.0.1 6666 java 0 1000 copy
OK
127.0.0.1:6379> get java
"jedis"
6666端口实例
127.0.0.1:6666> keys *
1) "java"
6379端口实例进行migrate的默认操作(dump——restore——del)
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> migrate 127.0.0.1 6666 hello 0 1000
OK
127.0.0.1:6379> get hello
(nil)
6666端口实例
127.0.0.1:6666> keys *
1) "java"
2) "hello"
从端口6379端口实例批量迁移到6666端口实例
127.0.0.1:6379> mset Tom "It's a cat" Jerry "It's a mouse"
OK
127.0.0.1:6379> mget Tom Jerry
1) "It's a cat"
2) "It's a mouse"
127.0.0.1:6379> migrate 127.0.0.1 6666 "" 0 1000 keys Tom Jerry
OK
127.0.0.1:6379> mget Tom Jerry
1) (nil)
2) (nil)
6666端口实例
127.0.0.1:6666> keys *
1) "Tom"
2) "Jerry"
3) "java"
4) "hello"
边栏推荐
- Summary ranges of leetcode topic resolution
- 1、 Software architecture evaluation
- 自定义标签——jsp标签增强
- 点击添加下拉框
- C#之Lambda不得不说的用法
- 670. Maximum Swap
- Subsets of leetcode topic resolution
- Happy number of leetcode topic analysis
- [cloud native | kubernetes] kubernetes principle and installation (II)
- 3. caller service call - dapr
猜你喜欢

636. Exclusive Time of Functions

The fourth online workshop review

设CPU有16根地址线,8根数据线,并用MREQ作为访存控制线号......存储器与CPU的连接

6月《中國數據庫行業分析報告》發布!智能風起,列存更生

【云原生 | Kubernetes篇】Kubernetes原理与安装(二)

JS mask important data of ID card and mobile phone number with * *

一元函数求极限三大方法---洛必达法则,泰勒公式

Flink error --caused by: org apache. calcite. sql. parser. SqlParseException: Encountered “time“

Linux MySQL installation

Testing -- automated testing selenium (about API)
随机推荐
Tencent cloud arm server evaluation practice
Combination sum II of leetcode topic analysis
Leetcode topic analysis set matrix zeroes
(resolved) difference between leftmost prefix and overlay index
636. Exclusive Time of Functions
JS mask important data of ID card and mobile phone number with * *
3、 System analysis and design
Detailed explanation of srl16e in xilinxffpga
Quartz Crystal Drive Level Calculation
Flink error --caused by: org apache. calcite. sql. parser. SqlParseException: Encountered “time“
Restore the default routing settings of the primary network card
3. Caller 服务调用 - dapr
65. Valid Number
Simple student management
Testing -- automated testing selenium (about API)
Unity grid programming 08
MySQL故障案例 | mysqldump: Couldn’t execute ‘SELECT COLUMN_NAME
MySQL故障案例 | ERROR 1071 (42000): Specified key was too long
线性表(SequenceList)的顺序表示与实现----线性结构
Unique paths II of leetcode topic analysis