Redis入门第十讲——Redis的那些特性

多数据库

一个Redis实例可以包括多个数据库,客户端可以指定连接某个Redis实例的哪个数据库,就好比一个MySQL中创建多个数据库,客户端连接时指定连接哪个数据库。

一个Redis实例最多可提供16个数据库,下标从0到15,客户端默认连接的是第0号数据库,当然了,也可以通过select命令选择连接哪个数据库。说到这里,你可能对Redis实例没有一个直观的认识,咋就一个Redis实例最多可提供16个数据库呢?毕竟要眼见为实嘛!人们只愿意相信他们眼睛看到的东西。那么如何更加直观地感受到这一点呢?你大可以通过Redis可视化工具(RedisDesktopManager)来连接Redis服务,当你成功连接上Redis服务之后,你便可以看到一个Redis实例最多有16个数据库了,如下图所示。
在这里插入图片描述
上面我已经讲过了,可以通过select命令选择连接哪个数据库。例如我想要连接2号库,那么这时就得输入select 2命令了,如下图所示。
在这里插入图片描述
要想重新连接回默认的第0号数据库,就得输入select 0命令。
在这里插入图片描述

移库

如果我们想要将当前库的key移植到1号库中,那么就得输入move key 1命令了,如下图所示。
在这里插入图片描述

服务器命令

ping

测试连接是否还存活着。若返回PONG,则表示连接还活着,如下图所示。
在这里插入图片描述
如果我们停掉Redis服务,那么再次使用该命令时,便会响应如下信息,从中可以看到现在ping不通了。
在这里插入图片描述

echo

在命令行打印一些内容。例如,
在这里插入图片描述

select

选择数据库。Redis数据库的编号是从0~15,我们可以选择任意一个数据库来进行数据的存取。
在这里插入图片描述

quit

退出连接。例如,
在这里插入图片描述

dbsize

返回当前数据库中key的数目。例如,
在这里插入图片描述

info

获取服务器的信息和统计。
在这里插入图片描述

flushdb

删除当前所选择数据库中的所有key。例如,
在这里插入图片描述

flushall

删除所有数据库中的所有key。例如,
在这里插入图片描述
在本例中,0号数据库和1号数据库我们都设置了一个key,然后我切换到1号库执行flushall命令,结果0号和1号库中的key都被清除了,说是此命令工作正常。温馨提示:此命令一定要谨慎使用,删库记得要跑路。

消息订阅与发布

如果你想了解Redis中的消息订阅与发布这一特性的话,那么务必就要知道下面这三个命令。
在这里插入图片描述

为了让大家能更加直观地认识Redis中的消息订阅与发布这一特性,下面我会举一个案例来演示在Redis中是如何订阅频道与在指定频道发布消息的。

第一步,在第一个连接中,订阅cctv频道。此时如果没有人发布消息,那么当前窗口会处于等待状态。
在这里插入图片描述

第二步,在另外一个连接中,在cctv频道中发布一条消息,例如:today is a newday。
在这里插入图片描述

此时切回到第一个连接中,你便会看到cctv频道发布的消息。
在这里插入图片描述

第三步,在第三个连接中,批量订阅以cctv开头的所有频道。
在这里插入图片描述

第四步,在第二个连接中,分别在cctv和cctv6这两个频道发布消息。
在这里插入图片描述

这时,如果切回到第一个连接中,那么你便会看到cctv频道发布的消息。
在这里插入图片描述

如果切回到第三个连接中,那么你便会看到cctv和cctv6这两个频道发布的消息。
在这里插入图片描述

Redis事务

概述

和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,multi、exec以及discard这三个命令是我们实现事务的基石。

特征

我总结了一下,Redis中的事务有如下五个特征。下面这些文字可能看得有些枯燥,但理论就是这样,总是一大堆的文字,看得让人昏昏欲睡。

第一个特征:在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行。

第二个特征:和关系型数据库中的事务相比,Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行

第三个特征:我们可以通过multi命令开启一个事务,有关系型数据库开发经验的人可以将其理解为begin transaction语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过执行exec/discard命令来提交/回滚该事务内的所有操作。这两个Redis命令可被视为等同于关系型数据库中的commit/rollback语句。

第四个特征:在事务开启之前,如果客户端与服务器之间出现通讯故障并导致网络断开,那么其后所有待执行的语句都将不会被服务器执行。然而如果网络中断事件是发生在客户端执行exec命令之后,那么该事务中的所有命令都会被服务器执行。

第五个特征:当使用Append-Only模式时,Redis会通过调用系统函数write将该事务内的所有写操作在本次调用中全部写入磁盘。然而如果在写入的过程中出现系统崩溃,如电源故障导致的宕机,那么此时也许只有部分数据被写入到磁盘,而另外一部分数据却已经丢失。Redis服务器会在重新启动时执行一系列必要的一致性检测,一旦发现类似问题,就会立即退出并给出相应的错误提示。此时,我们就要充分利用Redis工具包中提供的redis-check-aof工具了,该工具可以帮助我们定位到数据不一致的错误,并将已经写入的部分数据进行回滚。修复之后我们就可以再次重新启动Redis服务器了。

命令

multi

开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行exec命令时,这些命令才会被原子的执行,其类似于关系型数据库中的begin transaction语句。

exec

提交事务,类似于关系型数据库中的commit语句。

discard

事务回滚,类似于关系型数据库中的rollback语句。

测试

正常执行事务

在这里插入图片描述

执行事务过程中出现错误

在这里插入图片描述

回滚事务

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李阿昀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值