数码资讯
使用教程(八):详细的交易
1。总结: 与许多其他的数据库,redis也提供了一个交易机制作为NoSQL数据库。在Redis,四的命令多/执行/抛弃/手表是我们的交易执行的基石。我相信这个概念不是新的那些在关系数据库开发经验的开发商。尽管如此,我们将简要地列出交易在redis实施的特点。 1)。事务中的所有命令将按顺序执行。在
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
1。总结:
与许多其他的数据库,redis也提供了一个交易机制作为NoSQL数据库。在Redis,四的命令多/执行/抛弃/手表是我们的交易执行的基石。我相信这个概念不是新的那些在关系数据库开发经验的开发商。尽管如此,我们将简要地列出交易在redis实施的特点。
1)。事务中的所有命令将按顺序执行。在交易执行,Redis将不再为其他客户提供任何服务,所以在事情所有的命令都是由原子。
2)。相比于关系数据库中的事务,如果一个命令失败在Redis的事务,随后命令仍将执行。
3)。我们可以通过多个命令打开一个事务,有关系数据库开发经验的人可以理解它为开始事务语句。语句之后执行的命令将被视为事务中的操作。最后,我们可以提交/回滚所有操作在事务执行exec或丢弃的命令。这两个redis可以认为等于犯在一个关系数据库/回滚语句。
4)交易前打开,如果所有的客户端和服务器通信故障造成的网络断开之间,随后的所有可执行语句不会被服务器执行。然而,如果网络中断事件发生时,客户端执行exec命令后,在交易的所有命令都由服务器执行。
5)。当使用附加的唯一模式,Redis写的都是写在交易操作通过调用系统函数写在这个叫写所有的磁盘。然而,如果系统崩溃发生在写作的过程中,如引起停机断电,所以只有部分数据被写入到磁盘,而另一部分数据已经丢失。redis服务器将执行一系列必要的一致性检查时重新启动。一旦发现类似的问题是,它会立即退出,并给出相应的错误提示。在这一点上,我们必须充分利用这一工具在Redis Redis检查工具包提供,它可以帮助我们找到数据不一致的错误并回滚一些已写入的数据。修复后,我们可以Redis服务器再次启动。
两。相关命令列表:
命令的原型
时间复杂度
命令描述
返回值
多种
它用于标记事务的开始,随后执行的命令将存储在命令队列中,直到执行执行,直到原子执行命令为止。
恢复正常
exec
执行交易指令队列中的所有命令,而当前连接的状态恢复到正常状态,非事务性的状态。如果看命令执行交易,exec命令可以执行所有的命令,只有当交易队列观察监测的关键是不能修改的,否则执行将放弃当前交易的所有命令。
原子返回事务中的每个命令的返回。如果在事务中使用了表,一旦放弃了事务,执行将返回到null多容量应答。
丢弃
回滚命令在事务队列和恢复当前连接的状态到正常状态,即非交易状态。如果手表命令,命令把所有的unwatch键。
恢复正常。
关键watchkey {…}
o(1)
在执行多个命令之前,可以指定要监视的键。但是,在执行执行前,如果修改了修改过的键,执行器将放弃事务队列中的所有命令。
恢复正常。
unwatch
o(1)
取消当前事务中指定的键。如果执行执行或放弃命令,则不需要手动执行该命令,因为在此之后,所有监视的键将自动取消。
恢复正常。
三。An example of the command:
1。事务通常执行:
复制代码代码如下所示:
# Redis在shell命令行客户端工具。
使用CLI / >
在目前的#连接启动一个新事务。
Redis 127.0.0.1:6379 >多
好啊
第一个命令#行政事务,从订单的回归结果可以看出,该命令是不立即执行,但在命令队列的事务。
Redis 127.0.0.1:6379 >增加T1
排队
#和新指令的实施,它从结果中可以看出,顺序存储在事务队列。
Redis 127.0.0.1:6379 >增加T2
排队
#交易的所有命令队列中的命令,可以看到的结果,结果返回到命令队列。
Redis 127.0.0.1:6379 >执行
1)(整数)1
2)(整数)1
2的失败指挥。交易:
复制代码代码如下所示:
#开辟了一个新的交易。
Redis 127.0.0.1:6379 >多
好啊
#设置关键值为字符串类型3。
Redis 127.0.0.1:6379 > 3集
排队
从#弹出元素键关联的值的头,因为该值是一个字符串类型,和LPOP命令只能用于列表类型,所以在EXEC命令的执行,该命令将失败。
Redis 127.0.0.1:6379 > LPOP一
排队
#再次设置键值字符串4。
Redis 127.0.0.1:6379 > 4集
排队
#的核心价值,以确定该值是否在第二设置命令的事务设置成功。
Redis 127.0.0.1:6379 >得到
排队
#从结果中可以看出,在LPOP失败事件的第二命令和设置和获取命令执行成功,这一点是交易和Redis的交易关系数据库之间最重要的区别。
Redis 127.0.0.1:6379 >执行
1)好的
2)对持有错误值的键进行错误操作
3)好的
4)4
三.回滚事务:
复制代码代码如下所示:
#设置事务之前的T2值执行的关键。
Redis 127.0.0.1:6379 >设置T2 TT
好啊
# start a transaction.
Redis 127.0.0.1:6379 >多
好啊
#在交易设置一个新值的关键。
Redis 127.0.0.1:6379 >设置T2 ttnew
排队
放弃#事务。
Redis 127.0.0.1:6379 >丢弃
好啊
#检查T2的核心价值,可以从核心价值的结果看作是交易的价值开始之前。
Redis 127.0.0.1:6379 >获得T2
TT
四,监视命令和基于CAS的乐观锁:
在Redis的事务,表命令可以用来提供CAS(检查和设置)功能。假设我们监视多个键通过观察命令执行的交易之前。如果在监视之后有任何键值更改,则将执行由执行命令执行的事务。同时,空多体回复将返回通知调用方的事务执行失败。例如,我们再次假设不提供增加Redis命令实现原子性的关键值的增加。如果我们想实现这个功能,我们只能自己编写相应的代码,它的伪代码如下所示:
复制代码代码如下所示:
val =得到钥匙
1
集MyKey美元价值
上面的代码可以保证执行的结果是只在一个单一的连接正确,如果在同一时间同时在代码实现的客户数量,然后会有一个错误的场景经常出现在多线程程序中,比赛竞争(竞争条件)。例如,客户和B阅读MyKey的原有价值的同时,假设值为10。之后,两个客户端设置服务器的redis添加值,结果在MyKey的11,而不是12,我们认为,要解决类似的问题,我们需要看命令的帮助去看下面的代码:
复制代码代码如下所示:
手表钥匙
val =得到钥匙
1
多种
集MyKey美元价值
exec
和代码不同的是,以前通过看指挥监测关键的MyKey的值的第一个访问新的代码,然后设置命令包围在交易,使他们能够有效地执行前执行确保每一个连接,如果当前连接获得MyKey的价值是连接的客户端,所以对exec命令连接会失败。这样,对方可以了解是否有价值已经重新配置成功后判断返回值。
与许多其他的数据库,redis也提供了一个交易机制作为NoSQL数据库。在Redis,四的命令多/执行/抛弃/手表是我们的交易执行的基石。我相信这个概念不是新的那些在关系数据库开发经验的开发商。尽管如此,我们将简要地列出交易在redis实施的特点。
1)。事务中的所有命令将按顺序执行。在交易执行,Redis将不再为其他客户提供任何服务,所以在事情所有的命令都是由原子。
2)。相比于关系数据库中的事务,如果一个命令失败在Redis的事务,随后命令仍将执行。
3)。我们可以通过多个命令打开一个事务,有关系数据库开发经验的人可以理解它为开始事务语句。语句之后执行的命令将被视为事务中的操作。最后,我们可以提交/回滚所有操作在事务执行exec或丢弃的命令。这两个redis可以认为等于犯在一个关系数据库/回滚语句。
4)交易前打开,如果所有的客户端和服务器通信故障造成的网络断开之间,随后的所有可执行语句不会被服务器执行。然而,如果网络中断事件发生时,客户端执行exec命令后,在交易的所有命令都由服务器执行。
5)。当使用附加的唯一模式,Redis写的都是写在交易操作通过调用系统函数写在这个叫写所有的磁盘。然而,如果系统崩溃发生在写作的过程中,如引起停机断电,所以只有部分数据被写入到磁盘,而另一部分数据已经丢失。redis服务器将执行一系列必要的一致性检查时重新启动。一旦发现类似的问题是,它会立即退出,并给出相应的错误提示。在这一点上,我们必须充分利用这一工具在Redis Redis检查工具包提供,它可以帮助我们找到数据不一致的错误并回滚一些已写入的数据。修复后,我们可以Redis服务器再次启动。
两。相关命令列表:
命令的原型
时间复杂度
命令描述
返回值
多种
它用于标记事务的开始,随后执行的命令将存储在命令队列中,直到执行执行,直到原子执行命令为止。
恢复正常
exec
执行交易指令队列中的所有命令,而当前连接的状态恢复到正常状态,非事务性的状态。如果看命令执行交易,exec命令可以执行所有的命令,只有当交易队列观察监测的关键是不能修改的,否则执行将放弃当前交易的所有命令。
原子返回事务中的每个命令的返回。如果在事务中使用了表,一旦放弃了事务,执行将返回到null多容量应答。
丢弃
回滚命令在事务队列和恢复当前连接的状态到正常状态,即非交易状态。如果手表命令,命令把所有的unwatch键。
恢复正常。
关键watchkey {…}
o(1)
在执行多个命令之前,可以指定要监视的键。但是,在执行执行前,如果修改了修改过的键,执行器将放弃事务队列中的所有命令。
恢复正常。
unwatch
o(1)
取消当前事务中指定的键。如果执行执行或放弃命令,则不需要手动执行该命令,因为在此之后,所有监视的键将自动取消。
恢复正常。
三。An example of the command:
1。事务通常执行:
复制代码代码如下所示:
# Redis在shell命令行客户端工具。
使用CLI / >
在目前的#连接启动一个新事务。
Redis 127.0.0.1:6379 >多
好啊
第一个命令#行政事务,从订单的回归结果可以看出,该命令是不立即执行,但在命令队列的事务。
Redis 127.0.0.1:6379 >增加T1
排队
#和新指令的实施,它从结果中可以看出,顺序存储在事务队列。
Redis 127.0.0.1:6379 >增加T2
排队
#交易的所有命令队列中的命令,可以看到的结果,结果返回到命令队列。
Redis 127.0.0.1:6379 >执行
1)(整数)1
2)(整数)1
2的失败指挥。交易:
复制代码代码如下所示:
#开辟了一个新的交易。
Redis 127.0.0.1:6379 >多
好啊
#设置关键值为字符串类型3。
Redis 127.0.0.1:6379 > 3集
排队
从#弹出元素键关联的值的头,因为该值是一个字符串类型,和LPOP命令只能用于列表类型,所以在EXEC命令的执行,该命令将失败。
Redis 127.0.0.1:6379 > LPOP一
排队
#再次设置键值字符串4。
Redis 127.0.0.1:6379 > 4集
排队
#的核心价值,以确定该值是否在第二设置命令的事务设置成功。
Redis 127.0.0.1:6379 >得到
排队
#从结果中可以看出,在LPOP失败事件的第二命令和设置和获取命令执行成功,这一点是交易和Redis的交易关系数据库之间最重要的区别。
Redis 127.0.0.1:6379 >执行
1)好的
2)对持有错误值的键进行错误操作
3)好的
4)4
三.回滚事务:
复制代码代码如下所示:
#设置事务之前的T2值执行的关键。
Redis 127.0.0.1:6379 >设置T2 TT
好啊
# start a transaction.
Redis 127.0.0.1:6379 >多
好啊
#在交易设置一个新值的关键。
Redis 127.0.0.1:6379 >设置T2 ttnew
排队
放弃#事务。
Redis 127.0.0.1:6379 >丢弃
好啊
#检查T2的核心价值,可以从核心价值的结果看作是交易的价值开始之前。
Redis 127.0.0.1:6379 >获得T2
TT
四,监视命令和基于CAS的乐观锁:
在Redis的事务,表命令可以用来提供CAS(检查和设置)功能。假设我们监视多个键通过观察命令执行的交易之前。如果在监视之后有任何键值更改,则将执行由执行命令执行的事务。同时,空多体回复将返回通知调用方的事务执行失败。例如,我们再次假设不提供增加Redis命令实现原子性的关键值的增加。如果我们想实现这个功能,我们只能自己编写相应的代码,它的伪代码如下所示:
复制代码代码如下所示:
val =得到钥匙
1
集MyKey美元价值
上面的代码可以保证执行的结果是只在一个单一的连接正确,如果在同一时间同时在代码实现的客户数量,然后会有一个错误的场景经常出现在多线程程序中,比赛竞争(竞争条件)。例如,客户和B阅读MyKey的原有价值的同时,假设值为10。之后,两个客户端设置服务器的redis添加值,结果在MyKey的11,而不是12,我们认为,要解决类似的问题,我们需要看命令的帮助去看下面的代码:
复制代码代码如下所示:
手表钥匙
val =得到钥匙
1
多种
集MyKey美元价值
exec
和代码不同的是,以前通过看指挥监测关键的MyKey的值的第一个访问新的代码,然后设置命令包围在交易,使他们能够有效地执行前执行确保每一个连接,如果当前连接获得MyKey的价值是连接的客户端,所以对exec命令连接会失败。这样,对方可以了解是否有价值已经重新配置成功后判断返回值。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。