Redis 事务是不是没什么用?如果在生产环境中用到了,请举例说明场景。

2022-09-03 23:54:36 +08:00
 daoqiongsi1101
RT ,请举例说明,学习一下。
6103 次点击
所在节点    Redis
30 条回复
S2Line
2022-09-04 20:29:44 +08:00
没用,用 lua 脚本
thetbw
2022-09-04 21:39:56 +08:00
@jack778 multi 之后执行的查询都不会返回值,而是 exec 后批量返回。所以说 redis 的这个不像是事务,像是批处理。不过可以用 watch 来监听一个 key
自己简单写过一个笔记 https://blog.thetbw.xyz/archives/java-redis-transaction
Euthpic
2022-09-04 23:20:36 +08:00
@qinxi #12 你好好想想原子性的定义
daoqiongsi1101
2022-09-04 23:31:58 +08:00
@LeeReamond 看到第一个回复感到很惊讶,觉得他就是想都没想就喜欢喷的那种人,很多人也赞同我们的感受,我也给你点个赞
@fkdog 看了文档,介绍了事务的一些用法,谢谢你,我不是伸手要这个,麻烦具体回答我的问题
daoqiongsi1101
2022-09-04 23:35:23 +08:00
@Mitt 澄清一下,redis 事务原理和用法我看过,所以才提问,谢谢!请关注问题本身。
ediron
2022-09-05 02:15:27 +08:00
Redis 事务并不是传统意义上的 ACID 事务,它满足不了原子性和持久性,只是保证了这批命令在这个客户端执行完之前不被别的操作打断,执行期间遇到异常(命令执行错误或服务宕机)并不会回滚,这点官方也说明了认为 Redis 没必要回滚,命令执行了就是执行了彼此之间没有什么必要联系,这样简单便捷性能也更好。我也觉得是这样,Redis 本身就是非关系型数据库,各个数据之间并不存在逻辑关系,没必要回滚。所以就像 @thetbw 说的就把 Redis 事务当作是批处理,而批处理用 Lua 脚本就可以。确实我也没用到和见到过 Redis 事务的应用,另外有看到说事务中的每条命令都会与 Redis 服务器进行网络交互,这是比较浪费资源的行为,所以 Redis 事务是不建议在日常开发中使用的。
yanqic
2022-09-05 10:54:51 +08:00
bulljs 库(消息队列),会用到事务(批量添加消息 addBulk). 但是我们用的时候在阿里云 redis 集群模式下不可用. 感觉 redis 事物还是尽量少用
tairan2006
2022-09-05 13:46:52 +08:00
基本用 lua
iseki
2022-09-05 21:43:49 +08:00
在你不想 /不便于使用 lua 时,事物还是有点用的
iseki
2022-09-05 21:44:47 +08:00
比如说我在 Redis 里存了 protobuf…lua 就不太方便了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877542

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX