redis(4)--redis的事务简单介绍

redis的事务

什么是事务?

把一组数据库操作放在一起执行,保证原子性,要么同时成功,要么同时失败。

redis的事务

允许把一组redis命令放在一起执行,把命令进行序列化,然后一起执行,保证部分原子性

redis的事物只能保证部分原子性:

1)如果一组命令中,在压入事务队列过程中发生错误的命令,则本事务中所有的命令都不执行,能够保证事务的原子性。

2)如果一组命令中,在在压入事务队列过程中正常,但是在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其他命令的执行,不能保证事务的原子性

redis事务和mysql事务的区别?

redis事务过程:

​ redis提供的事务是将几个命令打包,然后一次性、按照先进先出的顺序有序地执行。在执行过程中不会被打断*(在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中),当事务队列中的所有命令都被执行(无论成功还是失败)*完毕之后,事务才会结束。

MULTI       //开始事务
SET   ...   //命令1入队
GET   ...   //命令1入队
SADD  ...   //命令1入队
......
EXEC        //执行事务(一次执行1.2.3...)

如上所示,redis的事务是以MULTI命令开始,之后是用户输入的多个命令,最后以EXEC命令结束。由于这种简单的事务在EXEC命令被调用之前不会执行任何实际操作,所以用户将没有办法根据根据读到的数据来做决定

传统关系型数据库(MySQL):

首先开启事务,接着进行一系列的读写操作,最后用户可以选择发送commit来提价事务,或者发送rollback放弃之前的修改。

Connection conn = ... //获取数据库连接
conn.setAutoCommit(false); //开启事务
try{
   //......执行增删改查sql
   //......执行增删改查sql
   conn.commit(); //提交事务
}catch (Exception e) {
  conn.rollback();//事务回滚
}finally{
   conn.close();//关闭链接
}

总结:

​ mysql在事务开始后对数据库的操作是执行的,而redis在事务开始命令后的操作是记录在队列里,没有执行,在事务结束后才按顺序执行。

redis事务操作的命令

1、multi 用来标记一个事务的开始。

2、exec 用来执行事务队列中的所有命令

3、discard 清除所有已经压入队列中的命令,并且结束整个事务

4、watch 监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行,否则,正常执行

​ 例:

​ set balance 100

​ set balance2 1000

​ set version 1

​ watch version

​ multi

​ decrby balance 50

​ incrby balance 50

​ exec

5、unwatch 放弃监控所有的键

watch version

unwatch

redis事务的小结

1、单独的隔离操作:事务中的所有命令都会序列化、顺序地执行。事务在执行过程中,不会被其它客户端发来的命令请求所打断,除非使用watch命令监控某些键。

2、不保证事务的原子性:redis同一个事务中如果一条命令执行失败,其后的命令仍然可能会被执行,redis的事务没有回滚。Redis已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis不需要事务回滚的能力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值