Redis扩展功能

Redis 事务

一次操作执行多条命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入、不许加塞。由于redis只能在执行前检查一组命令的语法错误,在命令执行时出现异常没法全体回滚,所以是弱一致性。

multi + exec组合

正常执行

执行前队列中命令无语法错误,且执行成功
image

全部回滚

执行前队列中的命令检查出语法错误,整个事务的命令都会放弃执行
image

部分执行失败

执行前队列中的命令语法检查通过,执行时发生异常,则只有执行异常的命令会执行失败,其它命令正常执行
image

multi + discard组合

主动放弃执行事务中的组合命令
image

watch + multi + exec组合

执行事务组合命令前先通过watch获取锁资源,watch采用乐观锁的形式,不会造成进程阻塞,当变更数据时数据发生变化,则事务执行失败。
image
示例中在执行multi前通过其它客户端改变了transtion:name的值,导致最终事务执行失败

unwatch

通过unwatch可以取消乐观锁资源的监听
image
示例中,在watch后通过其它客户端改变了transtion:name的值,之后通过unwatch取消了乐观锁的监听,所以事务可以成功执行。

Redis 管道

可以一次性的发送多条命令给服务端,服务端一次处理完成后,通过一条响应一次性将结果返回,减少客户端与redis的通信次数来实现降低往返的延迟时间。pipeline实现的原理是队列,先进先出特性就保证数据的顺序性。
如果管道中的任何命令执行失败,则所有后续命令都会被取消。

posted @ 2024-02-27 11:15  周仙僧  阅读(10)  评论(0编辑  收藏  举报