欢迎光临散文网 会员登陆 & 注册

Redis事物面试总结,第一次分享说的不好大家看文字吧

2023-02-16 00:00 作者:咸菜炒虾  | 我要投稿

Redis事物和我们平时理解的关系型数据库是不一样的,Redis事物在运行错误的情况下,除了执行过程中运行错误的命令之外,其他命令都可以正常执行。Redis事物是不支持回滚的。不满足原子操作,也就是说在执行多个命令时可以被其他命令插入。

Redis事物存在一些缺陷:

  1. 不满足原子性;
  2. 虽然Redis事物可以将多个请求命令打包发给Redis服务器,但是发送的每个命令请求都会与Redis服务器进行网络交互,所以还是很浪费资源的。

所以,在我们开发过程中基本上很少使用Redis事物。

如何解决 Redis 事务的缺陷?

Redis 从 2.6 版本开始支持执行 Lua 脚本,它和Redis事物很相似,利用Lua脚本可以批量执行多个Redis命令,这些命令会被提交到Redis服务器上一次性执行完成,大大的减小了网络开销。

如果Lua脚本执行过程中出错结束,那么出错之后的命令是不会被执行的,并且出错之前的命令无法撤销,所以Lua脚本不满足原子性。

使用Lua脚本的好处:

  1. 减少网络开销
  2. 原子操作:Redis将整个Lua脚本作为一个命令执行,中间不会被其他命令插入。

面试加问:

Redis事物和管道有什么区别?

1、网络开销

客户端可以通过管道一次性地发送多个命令而不用等服务器的响应,等所有命令都执行完之后再一次性地读取响应,多条命令的网络开销相当于是一条命令的开销。但是需要注意的一点是,当使用管道打包命令时,Redis必须在处理完所有命令之前将结果缓存起来,所以打包命令越多,消耗的缓存越多,所以使用时需要注意下。

Redis事物面试总结,第一次分享说的不好大家看文字吧的评论 (共 条)

分享到微博请遵守国家法律