全局指令
redis有5种数据类型,它们是键值对中的值,对于键来说有些通用的命令。这里称之为全局指令。
set 创建一个键值对
127.0.0.1:6379> set a 1
mset 创建多个键值对
127.0.0.1:6379> mset a 1 b 2 c 3
OK
get 通过键来获得值
127.0.0.1:6379> get a
mget 获取多个键值
127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3
dbsize 统计键的个数
注:dbsize是通过数据库内置的计数器来实现的,并不是将所有键遍历后统计的,不必担心影响服务器的性能。
127.0.0.1:6379> dbsize
exists 检查某个键是否存在,存在返回1,不存在返回0
127.0.0.1:6379> exists a # 键 a存在
(integer) 1
127.0.0.1:6379> exists d # 键 d 不存在
(integer) 0
del 删除指定键,成功返回1,没有指定键返回0
127.0.0.1:6379> del mylist # 删除单个键
127.0.0.1:6379> del a b # 删除多个键
expire 设置键过期,以秒为单位
127.0.0.1:6379> set hello world #设置一个键
127.0.0.1:6379> expire hello 50 #设置键50秒后过期
(integer) 1
127.0.0.1:6379> get hello #在过期之前可以查询到键值
"world"
127.0.0.1:6379> ttl hello # 使用ttl指令查看键的失效时间
(integer) 38
127.0.0.1:6379> ttl hello # -2:表示键不存在
(integer) -2
127.0.0.1:6379> get hello # 查询不到键值了
(nil)
关于ttl指令查询的返回值:
大于0:键剩余的过期时间;
-1:键没设置过期时间;
-2:键不存在或已过期;
expireat 设置过期时间,以unix时间戳为单位
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> expireat hello 1583478533 # 最后为unix时间戳
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 1056
127.0.0.1:6379> ttl hello
(integer) 1052
rename 更改键名
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> rename hello abc # 将键名改为abc
OK
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> get abc
"world"
*keys 列出所有键**
这个指令生产中不建议使用,忘了就好。
127.0.0.1:6379> keys *
randomkey 随机返回一个键名
127.0.0.1:6379> randomkey
"c"
127.0.0.1:6379> randomkey
"user:1_2:sdiff"
type 查询键值的数据类型
127.0.0.1:6379> type a
string
**数据类型有:**
string:字符串。
hash:哈希。
list:列表。
set:集合。
zset:有序集合。
select 切换库
redis中默认有16个库,编号为:0–15,配置文件中下面配置决定了库的数量:
databases 16 # 16个库
默认登录后处于编号为0的库中,使用select指令进行切库操作。
127.0.0.1:6379> select 12
OK
127.0.0.1:6379[12]> select 0
OK
迁移键
move 库和库内部迁移
注:move迁移后,源库将不存在被迁移走的键值对。
127.0.0.1:6379> get abc
"world"
127.0.0.1:6379> move abc 12 # 迁移到编号为12的库
(integer) 1
127.0.0.1:6379> get abc # 当前库就没有这个键值了
(nil)
127.0.0.1:6379> select 12 # 切换到编号为12的库
OK
127.0.0.1:6379[12]> get abc # 可以查看到键值
"world"
dump+restore 多个redis实例上进行迁移键值
dump:进行序列化备份,格式是rdb。
restore:是将dump产生的序列化的值复原,命令格式为:restore key ttl serialized-value,其中key表示定义的新键名;ttl:设置过期时间,设置为0表示永不过期;serialized-value则为dump产生的序列化值。
# redis01实例上
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> dump hello # 获取下面的序列化编码
"\x00\x05world\t\x00\xc9#mH\x84/\x11s"
# redis02实例上
127.0.0.1:6379> restore new_hello 0 "\x00\x05world\t\x00\xc9#mH\x84/\x11s"
OK
127.0.0.1:6379> get new_hello
"world"
注:整个迁移过过程,并非原子性。
migrate 具有原子性的迁移
命令格式:migrate host port key| destination-db timeout [COPY] [REPLACE]
host:主机IP
port:端口
key:要迁移的键
destination-db:要迁移到对端的哪个编号的库?
timeout:超时时间,单位为毫秒
COPY:是否复制,默认为剪切的方式
replace:migrate不管目标redis是否存在该键都会正常迁移进行数据覆盖。
下面是模拟redis01主机迁移数据到redis02
# 主机redis01上,设置两个键值,以不同的方式进行迁移
127.0.0.1:6379> set a move_test
OK
127.0.0.1:6379> set b move_test_02
OK
127.0.0.1:637