Redis初探(4)——Redis的特性
1.多数据库
每一个Redis实例可以包括多个数据库,客户端可以指定连接某个Redis实例的某个数据库。
一个Redis实例最多可以提供16个数据库,下标从0到15,客户端默认连接第0号数据库。
含义 | 方法 |
---|---|
选择第n号数据库 | select n |
将当前库的key转移到第n号数据库 | move key n |
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 |
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)
2. 消息订阅与发布
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。
含义 | 方法 |
---|---|
订阅频道 | subscribe cctv |
批量订阅频道 | psubscribe cctv* |
在指定频道中发送消息 | publish cctv “hello” |
实现消息的订阅和发布至少需要两个终端,我们在终端1中订阅cctv这个频道的消息:
127.0.0.1:6379> subscribe cctv
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "cctv"
3) (integer) 1
在终端2中向cctv这个频道发布消息:
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*
3.事务
Redis和其他数据库一样,也支持事务功能,但是Redis的数据库并不是一种真正的事务,它其实更像是一种批处理。
传统数据库意义上的事务,是将多条SQL语句作为一个整体,如果其中任何一条语句执行失败,那么这些语句都不会被执行。但是Redis的事务,如果有某一条命令执行失败,其后的命令仍然会执行。
含义 | 方法 |
---|---|
开启事务(类似:begin transaction) | multi |
提交事务(类似:commit) | exec |
事务回滚(类似:rollback) | discard |
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>
还没有评论,来说两句吧...