云服务器网:购买云服务器和VPS必上的网站!

Redis事务:实现自动回滚

Redis是一款NOSQL非关系型数据库,它支持原子性的单条指令操作,但是其实不支持多条指令的“批量”操作,特别是在高性能的密集读取和写入环境,如果要完成更复杂的多条操作,需要使用Redis的事务来实现。
Redis的事务是通过Transaction类来实现的

redis是一款NOSQL非关系型数据库,它支持原子性的单条指令操作,但是其实不支持多条指令的“批量”操作,特别是在高性能的密集读取和写入环境,如果要完成更复杂的多条操作,需要使用Redis的事务来实现。

Redis的事务是通过Transaction类来实现的,它支持原子性的操作:利用watch来监控key的状态,在事务履行拿出key时,如果key被其它线程改动,则不履行,否则可以正确切现“回滚”。

例如,在一个业务场景中,有两个key:count1和count2,key count1的初始值为2,key count2的初始值为8,如果要履行原子性的增加count1加1,减少count2减1操作,以确保两个操作同时产生且任何一步没有状态产生异常,可使用Redis的事务:

“`javascript

// watch count1 and count2

redis.watch(‘count1′,’count2’);

// start a transaction

var multi = redis.multi();

// count1 + 1

multi.incr(‘count1’);

// count2 – 1

multi.decr(‘count2’);

// run the transaction with auto rollback

multi.exec(function(err, result){

if(err){

// if err, rollback

console.log(‘transaction rollback!’);

}

else{

console.log(‘transaction has been committed!’);

}


当事务开始履行时,Redis会检查watch的key会不会被改动,如果有,则会自动回滚,将key的状态保持为检查时的状态,也就是说,在事务的exec方法中可以响应判断,如果err不为空,即说明事务出现异常,数据回滚;如果err为空,即表明数据正常,事务提交。

而Redis的事务的回滚不单单能够用在两个加减操作,也能够用在多个set,mset,del等指令中,这样就能够更好的实现一些复杂的逻辑操作。

本文来源:https://www.yuntue.com/post/221760.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注