这是我参与更文挑战的第5天,活动详情查看: 更文挑战
本文正在参加「Java主题月 - Java 开发实战」,详情查看 活动链接
相关文章
Redis实战汇总:Redis实战
前言
- 事务
①原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
②一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
③隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
④持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
在Redis事务没有没有隔离级别的概念!
在Redis单条命令式保证原子性的,但是事务不保证原子性!
- 乐观锁
①当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。
②没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。
在Redis是可以实现乐观锁的!
一、Redis如何实现事务?
①正常执行事务
1 | bash复制代码127.0.0.1:6379> multi #开启事务 |
②放弃事务
1 | bash复制代码127.0.0.1:6379> multi #开启事务 |
③编译时异常,代码有问题,或者命令有问题,所有的命令都不会被执行
1 | bash复制代码127.0.0.1:6379> multi #开启事务 |
④运行时异常,除了语法错误不会被执行且抛出异常后,其他的正确命令可以正常执行
1 | bash复制代码127.0.0.1:6379> multi #开启事务 |
⑤总结:由以上可以得出结论,Redis是支持单条命令事务的,但是事务并不能保证原子性!
二、Redis如何实现乐观锁?
①watch(监视)
1 | bash复制代码127.0.0.1:6379> set money 100 #添加金钱100 |
②多线程测试watch
#线程1
1 | bash复制代码#线程1 |
#线程2
1 | bash复制代码#线程2,这个在事务执行前操作执行 |
③总结:乐观锁和悲观锁的区别。
悲观锁: 什么时候都会出问题,所以一直监视着,没有执行当前步骤完成前,不让任何线程执行,十分浪费性能!一般不使用!
乐观锁: 只有更新数据的时候去判断一下,在此期间是否有人修改过被监视的这个数据,没有的话正常执行事务,反之执行失败!
路漫漫其修远兮,吾必将上下求索~
到此关于Redis的事务和乐观锁的讲解就算告一段落了,如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~
本文转载自: 掘金