键重命名mysql
rename oldKey newkey //格式redis
rename oldKey newKey //若oldKey以前存在则被覆盖sql
set name james ;set name1 mike //数据初始化数据库
renamenx name name1 //重命名失败,只有当name1不存在才能更名服务器
返回随机键 运维
dbsize //redis有16个库,查看当前库的键值对总数dom
randomkey //返回随机键spa
键过时:线程
expire name:03 20 //键name:03 在10秒后过时unix
ttl name:03 //查看过时按秒到计时,当返回-2说明已删除
pttl name:03 //查看过时按毫秒到时计
set name:05 james //初始化数据
pexpire name:05 20000 //20000毫秒(20S)后过时
expire name:06 -2 //直接过时,和del同样
expireat name:04 1516971599 //设置在2018/01/26 20:59:59过时
时间转时间戳:网址http://tool.chinaz.com/Tools/unixtime.aspx
hset user:01 name james //初始化数据
expire user:01 60 //设置60S右过时
ttl user:01 //查看过时剩余时间
persist user:01 //去掉过时
ttl user:1 //返回-1 能够永久查询不失效
注意:对于字符串重设值后,expire无效,
set name james
expire name 50
ttl name
set name james1 //此时expire取消
ttl name //返回-1, 长期有效
键的迁移:
把部分数据迁移到另外一台redis服务器
1, move key db //reids有16个库, 编号为0-15
set name james1; move name 5 //迁移到第6个库
select 5 ;//数据库切换到第6个库, get name 能够取到james1
这种模式不建议在生产环境使用,在同一个reids里能够玩
2, dump key;
restore key ttl value //实现不一样redis实例的键迁移,ttl=0表明没有过时时间
例子:在A服务器上 192.168.1.111
set name james;
dump name; // 获得"\x00\x05james\b\x001\x82;f\"DhJ"
在B服务器上:192.168.1.118
restore name 0 "\x00\x05james\b\x001\x82;f\"DhJ"
get name //返回james
3,migrate指令迁移到其它实例redis,在1.111服务器上将test移到118
migrate |
192.168.1.118 |
6379 |
test |
0 |
1000 |
copy |
replace |
keys |
指令 |
要迁移的目标IP |
端口 |
迁移键值 |
目标库 |
超时时间 |
迁移后不删除原键 |
无论目标库是不存在test键都迁移成功 |
迁移多个键 |
键的遍历
redis提供了两个命令来遍历全部的键
1,键全量遍历:
mset country china city bj name james //设置3个字符串键值对
keys * //返回全部的键, *匹配任意字符多个字符
keys *y //以结尾的键,
keys n*e //以n开头以e结尾,返回name
keys n?me // ?问号表明只匹配一个字符 返回name,全局匹配
keys n?m* //返回name
keys [j,l]* //返回以j l开头的全部键 keys [j]ames 全量匹配james
考虑到是单线程, 在生产环境不建议使用,若是键多可能会阻塞,若是键少,能够
2,渐进式遍历
mset a a b b c c d d e e f f g g h h i i j j k k l l m m n n o o p p q q r r s s t t u u v v w w x x y y z z //初始化26个字母键值对
字符串类型:
scan 0 match n* count 20 //匹配以n开头的键,取20条,第一次scan 0开始
第二次从游标4096开始取20个以n开头的键,至关于一页一页的取
当最后返回0时,键被取完
好比将old:user开头的元素全删掉
注:可有效地解决keys命令可能产生的阻塞问题
用法和scan同样
select 0 //共16个库, 0 --15, select切换数据库
set name james
select 1
get name //隔离了,取不到,和mysql不一样库同样
flushdb: 只清空当前数据库的键值对 dbsiz 0
flushall: 清空全部库的键值对 (这两个指令慎用!!!!)
其中redis3.0之后的版本慢慢弱化了这个功能,如在redis cluster中只容许0数据库缘由:
1,redis单线程,若是用多个库,这些库使用同一个CPU,彼此会有影响
2,多数据库,调试与运维麻烦,如有一个慢查询,会影响其它库查询速度
3,来回切换,容易混乱