一、多数据库
每一个 Redis 实例可以包括多个数据库,客户端可以指定连接某个 Redis 实例的某个数据库。一个Redis实例最多可以提供 16 个数据库,下标从 0 到 15,客户端默认连接第 0 号数据库 。
含义
方法
选择第 n 号数据库
select n
将当前库的 key 转移到第 n 号数据库
move key n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 wxs@ubuntu:/usr/local/redis/src$ ./redis-cli #默认进入0号数据库 127.0.0.1:6379> keys * 1) "myList" 2) "mySet3" 3) "mySet1" 4) "myListB" 5) "userName" 6) "mySet2" 7) "int_num" 8) "float_num" 127.0.0.1:6379> move userName 1 #将userName移到1号数据库 (integer) 1 127.0.0.1:6379> exists userName #userName已经不存在于0号数据库 (integer) 0 127.0.0.1:6379> select 1 #进入1号数据库 OK 127.0.0.1:6379[1]> exists userName #userName存在于1号数据库 (integer) 1
这里补充下之前没有提到的 Redis 服务器的一些命令:
含义
方法
测试连接状态是否可用
ping
命令行中打印内容
echo xxx
返回当前数据库中 key 的数目
dbsize
获取服务器的信息和统计
info
删除当前选择数据库中所有key
flushdb
删除所有数据库中所有key
flushall
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 wxs@ubuntu:/usr/local/redis/src$ ./redis-cli 127.0.0.1:6379> select 1 #进入1号数据库 OK 127.0.0.1:6379[1]> ping #检查连接状态 PONG 127.0.0.1:6379[1]> dbsize #获取当前数据库key数目 (integer) 1 127.0.0.1:6379[1]> flushdb #清空当前数据库 OK 127.0.0.1:6379[1]> keys * (empty list or set) 127.0.0.1:6379[1]> flushall #清空所有数据库 OK 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> keys * (empty list or set)
二、消息订阅与发布
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量 的频道。
含义
方法
订阅频道
subscribe cctv
批量订阅频道
psubscribe cctv*
在指定频道中发送消息
publish cctv “hello”
实现消息的订阅和发布至少需要两个终端,我们在终端1中订阅 cctv 这个频道的消息:
1 2 3 4 5 127.0.0.1:6379> subscribe cctv Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "cctv" 3) (integer) 1
在终端2中向 cctv 这个频道发布消息:
1 2 3 4 wxs@ubuntu:/usr/local/redis/src$ ./redis-cli 127.0.0.1:6379> publish cctv "send Message to cctv..." (integer) 1 127.0.0.1:6379>
此时在终端1中就接收到了消息:
我们也可以以一种正则的形式订阅多个频道,比如 cctv 下面有多个频道,例如 cctv-1、cctv-2 等等,我们只需订阅这个即可:
psubscribe cctv*
三、事务
Redis 和其他数据库一样,也支持事务功能,但是 Redis 的数据库并不是一种真正的事务 ,它其实更像是一种批处理 。
传统数据库意义上的事务,是将多条 SQL 语句作为一个整体,如果其中任何一条语句执行失败,那么这些语句都不会被执行。但是Redis的事务,如果有某一条命令执行失败,其后的命令仍然会执行 。
含义
方法
开启事务(类似:begin transaction)
multi
提交事务(类似:commit)
exec
事务回滚(类似:rollback)
discard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 wxs@ubuntu:/usr/local/redis/src$ ./redis-cli 127.0.0.1:6379> set num 1 OK 127.0.0.1:6379> set name jitwxs OK 127.0.0.1:6379> multi #开启事务 OK 127.0.0.1:6379> incr num QUEUED 127.0.0.1:6379> incr name QUEUED 127.0.0.1:6379> set age 20 QUEUED 127.0.0.1:6379> exec #执行事务 1) (integer) 2 2) (error) ERR value is not an integer or out of range #命令报错 3) OK #前面命令出错后这条命令仍然执行了 127.0.0.1:6379> get num "2" 127.0.0.1:6379> get name "jitwxs" 127.0.0.1:6379> get age #该命令的确执行了 "20" 127.0.0.1:6379>