Redis总结三(事务 Jedis)

Redis事务

  • Redis中事务可以一次执行多个命令,是一组命令的集合,一个事务中的命令都会被序列化,在事务的执行过程中,会按照顺序串行化执行队列中的命令。

  • Redis是一次性,顺序性,排他性的执行一个队列中的一系列命令 Redis不保证原子性

  • Redis中,单条命令的执行是原子性,但事务是不保证原子性,而且没有回滚的换概念, 事务中任意的命令执行失败,其他的命令是可以执行的

  • Redis中的事务是没有隔离级别的

事务命令

在这里插入图片描述
事物的执行过程分为三个步骤:开始事务:multi ———>命令入队————>执行事务exec

所有的命令的事务中,并没有直接执行,只有发起执行事务的命令时才会正常执行

正常的执行命令

在这里插入图片描述

放弃事务

discard:放弃事务队列运行
在这里插入图片描述

编译时异常

如果命令错误,即编译时异常,事务中的所有命令都不会被执行
在这里插入图片描述

执行时异常

执行时异常,如果队列中存在错误的语法,执行命令的时候,其他的命令可以正常执行,错误的命令抛出异常
在这里插入图片描述

watch

监视一个或者多个key,如果事务在执行之前这个key被其他的命令改动,那么事务会被打断
可以当做乐观锁使用
在这里插入图片描述

使用watch当做乐观锁使用

使用watch监视Money,在窗口1监视money,并开始事务,在窗口2上对事务做了修改,在窗口1执行事务时会执行失败
窗口2执行命令
在这里插入图片描述
窗口1执行命令:
在这里插入图片描述

扩展:

Redis为啥不支持回滚?

如果你具备关系型数据库的知识背景,你就会发现一个事实:在事务运行期间,虽然Redis命令可能会执行失败,但是Redis仍然会执行事务中余下的其他命令,而不会执行回滚操作,你可能会觉得这种行为很奇怪,然而,这种行为也有合理之处:只有当被调用的Redis命令有语法错误时,这条命令才会执行失败(在将这个命令放入事务队列期间,Redis能够发现此类问题),或者对某个键执行不符合其数据类型的操作:实际上,这就意味着只有程序错误才会导致Redis命令执行失败,这种错误很有可能在程序开发期间发现,一般很少在生产环境发现。Redis已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis不需要事务回滚的能力。

Jedis

在java体系中,有三种常见的Redis客户端:Jedis、Redission和lettuce

  • Jedis:其提供API是和Redis命令相比是比较全面,Jedis中java方法基本和Redis提供的命令保持一致,调用的是比较底层的Redis的命令
  • Redisson:实现分布式和可扩展性的java的数据结构,分布式锁、分布式集合、和jedis相
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值