Redis是否需要事务(redis需要事物吗)
现如今,Redis作为一款高性能的内存数据库越来越受到广大开发者的青睐,同时也被广泛用于服务器——客户端之间的数据交换。那么,Redis是否需要事务来保证数据完整性?
Redis要想实现数据完整性需要事务,但是直接提供事务的话会对性能造成很大影响,所以它并不完全依赖于事务。Redis能够通过提供事务型命令(Multi/exec)来提供一定程度的事务性,它内部采用的 事务性算法叫做 Multi/Exec pipeline,它允许多个命令在一段时间内发布到Redis,它能够保证在期间的任何时刻,服务器 处理事务内的一系列命令必须都把它们当做一个原子操作,要么全部成功,要么全部失败,而且保证有序的完成。
当执行Redis的Redis multi/exec 时,Redis将会进入事务模式,此时,会将Redis是否可读也可写的状态修改为只可写。当事务提交或者回滚时,它会将Redis的状态修改为可读可写状态。这一微小的延迟,保证了当前事务完整性但是会造成短暂的延迟,这是此类事务性算法的一个典型的缺点。
Redis采用的是乐观锁的方式来实现事务处理,相比另外一种悲观锁的方式,通过它可以更有效的地执行事务,将Redis的并发处理一定程度上提升,其原理是每次写入key需要先取出相应key的version number,写入动作完成后,再比对version number,如果发现变化,则重新取出key进行处理,可以保证数据完整性。
总结而言,Redis不算是真正完全依赖于事务,因为它采用乐观锁的方式来实现事务,这样就更加具有弹性,可以在某种程度上保证多线程的完整性。但是从数据库的定义上,Redis依然不是一个完整的数据库,所以如果你真正需要一个完整的数据库,它并不是你最佳的选择。