daoqiongsi1101
V2EX  ›  Redis

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

  •  
  •   daoqiongsi1101 · Sep 3, 2022 · 7621 views
    This topic created in 1525 days ago, the information mentioned may be changed or developed.
    RT ,请举例说明,学习一下。
    30 replies  •  2022-09-05 21:44:47 +08:00
    fkdog
    fkdog
    Sep 4, 2022
    1
    现在的人都懒到官方文档都不肯去看一眼,光明正大伸手了?
    https://redis.io/docs/manual/transactions/
    richangfan
    richangfan
    Sep 4, 2022
    2
    时间窗口计数器,用来限流
    LeegoYih
    LeegoYih
    Sep 4, 2022
    3
    用事务的目的是什么,如果只是为保证多条命令原子性,可以用 lua 脚本
    LeeReamond
    LeeReamond
    Sep 4, 2022❤️18
    4
    @fkdog 显然 OP 是看过以后认为没什么用才来发帖,你不想答可以不答,我觉得没必要踩别人一句体现自己的优越感
    kindjeff
    kindjeff
    Sep 4, 2022
    5
    用 Redis 做分布式锁简直不要太常见
    sardina
    sardina
    Sep 4, 2022 via iPhone
    6
    @kindjeff 做分布式锁 用 redis 的事务吗
    luin
    luin
    Sep 4, 2022❤️3
    7
    个人感觉确实没啥用哈哈哈。之前公司的项目都是用 Redis scripts 。

    另外 Redis 官方文档也提到了:

    > Something else to consider for transaction like operations in redis are redis scripts which are transactional. Everything you can do with a Redis Transaction, you can also do with a script, and usually the script will be both simpler and faster.
    xhinliang
    xhinliang
    Sep 4, 2022
    8
    没什么用。尤其是对于 proxy 实现的集群,等同于摆设。
    javaisthebest
    javaisthebest
    Sep 4, 2022
    9
    没啥用,Redis 事务是一个假事务,不保证原子性。
    orzwalker111
    orzwalker111
    Sep 4, 2022
    10
    没用
    qinxi
    qinxi
    Sep 4, 2022
    11
    @sardina #6 redisson 里面应该是用的.
    qinxi
    qinxi
    Sep 4, 2022
    12
    @javaisthebest #9 假事务说的是不能回滚.并不是不保证原子吧
    crysislinux
    crysislinux
    Sep 4, 2022 via Android
    13
    事务确实没啥用了,基本上都用 lua 替代了
    MeteorCat
    MeteorCat
    Sep 4, 2022 via Android
    14
    实际日常很少用,都忘记有这个特性了
    securityCoding
    securityCoding
    Sep 4, 2022
    15
    基本不用,都在用 lua 了
    Mitt
    Mitt
    Sep 4, 2022❤️1
    16
    @LeeReamond #4 不知道你这个 “显然” 又是从何而来,毕竟楼主既没有说明自己看过也没列举自己的观点
    jack778
    jack778
    Sep 4, 2022
    17
    被 redis 事务坑过,你插入了一个值,然后马上查询居然查不到...
    roundgis
    roundgis
    Sep 4, 2022 via Android
    18
    從來沒用過

    有需要用 eval script 就好了
    kkkiio
    kkkiio
    Sep 4, 2022 via iPhone
    19
    redis 持久性都很难保证,跟数据库的事务差太远了,用脚本凑合就行了
    cheng6563
    cheng6563
    Sep 4, 2022
    20
    没用,被 lua 完全取代了
    S2Line
    S2Line
    Sep 4, 2022 via iPhone
    21
    没用,用 lua 脚本
    thetbw
    thetbw
    Sep 4, 2022
    22
    @jack778 multi 之后执行的查询都不会返回值,而是 exec 后批量返回。所以说 redis 的这个不像是事务,像是批处理。不过可以用 watch 来监听一个 key
    自己简单写过一个笔记 https://blog.thetbw.xyz/archives/java-redis-transaction
    Euthpic
    Euthpic
    Sep 4, 2022
    23
    @qinxi #12 你好好想想原子性的定义
    daoqiongsi1101
    daoqiongsi1101
    OP
    Sep 4, 2022
    24
    @LeeReamond 看到第一个回复感到很惊讶,觉得他就是想都没想就喜欢喷的那种人,很多人也赞同我们的感受,我也给你点个赞
    @fkdog 看了文档,介绍了事务的一些用法,谢谢你,我不是伸手要这个,麻烦具体回答我的问题
    daoqiongsi1101
    daoqiongsi1101
    OP
    Sep 4, 2022
    25
    @Mitt 澄清一下,redis 事务原理和用法我看过,所以才提问,谢谢!请关注问题本身。
    ediron
    ediron
    Sep 5, 2022❤️1
    26
    Redis 事务并不是传统意义上的 ACID 事务,它满足不了原子性和持久性,只是保证了这批命令在这个客户端执行完之前不被别的操作打断,执行期间遇到异常(命令执行错误或服务宕机)并不会回滚,这点官方也说明了认为 Redis 没必要回滚,命令执行了就是执行了彼此之间没有什么必要联系,这样简单便捷性能也更好。我也觉得是这样,Redis 本身就是非关系型数据库,各个数据之间并不存在逻辑关系,没必要回滚。所以就像 @thetbw 说的就把 Redis 事务当作是批处理,而批处理用 Lua 脚本就可以。确实我也没用到和见到过 Redis 事务的应用,另外有看到说事务中的每条命令都会与 Redis 服务器进行网络交互,这是比较浪费资源的行为,所以 Redis 事务是不建议在日常开发中使用的。
    yanqic
    yanqic
    Sep 5, 2022
    27
    bulljs 库(消息队列),会用到事务(批量添加消息 addBulk). 但是我们用的时候在阿里云 redis 集群模式下不可用. 感觉 redis 事物还是尽量少用
    keenkiller
    keenkiller
    Sep 5, 2022
    28
    基本用 lua
    iseki
    iseki
    Sep 5, 2022 via Android
    29
    在你不想 /不便于使用 lua 时,事物还是有点用的
    iseki
    iseki
    Sep 5, 2022 via Android
    30
    比如说我在 Redis 里存了 protobuf…lua 就不太方便了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2166 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 03:06 · PVG 11:06 · LAX 19:06 · JFK 22:06
    ♥ Do have faith in what you're doing.