Redis是事务机制
- Redis不支持事务的回滚机制,当事务发生错误,整个事务会继续执行下去,直到整个事务队列中所有的命令执行完成
- Redis 提供两种数据持久化方式
- RDB:持久化可以把当前进程的数据生成快照保存到磁盘上,触发 RDB 持久化的方式分为手动触发和自动触发。因为持久化操作与命令操作不是同步进行的,所以无法保证事务的持久性。
- AOF:持久化采用日志的形式记录每个写操作,弥补了 RDB 在数据一致性上的不足,但是采用 AOF 模式,就意味着每条执行命令都需要写入文件中,会大大降低 Redis 的访问性能。启用 AOF 模式需要手动开启,有 3 种不同的配置方式,默认为 everysec,也就是每秒钟同步一次。其次还有 always 和 no 模式,分别代表只要有数据发生修改就会写入 AOF 文件,以及由操作系统决定什么时候记录到 AOF 文件中。
- Redis 是单线程程序,在事务执行时不会中断事务,其他客户端提交的各种操作都无法执行,因此你可以理解为 Redis 的事务处理是串行化的方式,总是具有隔离性的
Redis 的事务处理命令
- MULTI 开启一个事务
- EXEC 事务执行,将一次型执行事务内的所有命令
- DISCARD 取消事务
- WATCH 监视一个或是多个键
- UNWATCH 取消WATCH命令对所有键的监视
使用 Redis 的 WATCH 和 MULTI 命令来处理共享资源的并发操作,比如秒杀,抢票等。实际上 WATCH+MULTI 实现的是乐观锁。
在 Redis 中不存在悲观锁,事务处理要考虑到并发请求的情况,我们需要通过 WATCH+MULTI 的方式来实现乐观锁,如果监视的 KEY 没有发生变化则可以顺利执行事务,否则说明事务的安全性已经受到了破坏,服务器就会放弃执行这个事务,直接向客户端返回空回复(nil),事务执行失败后,我们可以重新进行尝试。
网友评论