在redis中的事务还是和之前学过的关系型数据库的事务有区别的。
redis原子性
所谓原子操作是指不会被线程调度机制打断的操作(两个线程之间的操作互不影响,每个操作都是独立的线程)
单线程中,能够在单条指令中完成的操作都可以认为是"原子操作",因为终端只能发生于指令之间
在多线程中,不能被其他进程(线程)打断的操作就叫原子操作
Redis 单命令的原子性主要得益于Redis的单线程。
乐观锁和悲观锁
悲观锁:每次执行操作的时候都认为数据会被别人更改,所以在每次操作的时候都会上锁,这样别人想要拿到这个数据时就需要等到释放时才能修改。
乐观锁:每次执行操作的时候都会认为数据未被修改,但是在修改数据的时候会判断此期间数据是否被别人修改,一个事务执行原子操作后,对数据version进行修改,另一事务进行原子操作时对数据的version进行判断。
乐观锁适用于多读的应用类型,这样可以提高吞吐,redis就是使用这种chek - and -set机制实现事务的。