开启事务 multi:
命令入队就是写正常的其它命令
执行事务是exec
正常执行事务!
放弃事务:
我们每次事务执行完毕就结束了,下次想使用事务还要重新开启:
编译性异常(代码有问题!命令有错!)事务中所有的命令都不会被执行!
运行时异常(1/0),如果事务队列中存在语法性错误,那么执行命令的时候,其它命令是可以正常执行的,错误命令抛出异常!
监控!
监视测试:
我们监视我们的money,正常执行成功是这样的。
测试多线程修改值,使用watch可以当做redis的乐观锁操作!
我们再开一个服务端
我们的线程2取出10块,还没有执行事务。
这时候线程1又去把余额充值到1000了:
我们在执行之前,另外一个事务修改值,我们执行就失败了!
那我们能不能去解决这个问题呢?
如果修改失败,获取最新的值就好。
unwatch:如果发现事务执行失败,就先解锁。
watch:获取最新的值,再次监视,select version
exec:比对监视的值是否发生了变化,如果没有变化,那么可以执行成功,如果变化就执行失败。重复这个操作就可以了。
面试的时候redis经常问乐观锁。
我们去创建一个java空项目:
里面创建一个module。
首先我们要去导入我们的jedis的包:
编码测试:
连接数据库
操作命令
断开连接
我们这里是启动了我们本地的redis:
常用的Api我们直接看一下就行和之前的命令都差不多:
这里我就不去自己写代码了,直接截屏狂神的代码。
我们现在来用jedis做一个正常的事务:
我们这里有残余是没有清空缓存。
我们加上flushdb:
我们现在就可以使用我们的java去做所有的我们redis的功能了。下一次课我们会去在springboot里去整合我们的redis.