V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
daoqiongsi1101
V2EX  ›  Redis

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

  •  
  •   daoqiongsi1101 · 150 天前 · 4622 次点击
    这是一个创建于 150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT ,请举例说明,学习一下。
    30 条回复    2022-09-05 21:44:47 +08:00
    fkdog
        1
    fkdog  
       150 天前
    现在的人都懒到官方文档都不肯去看一眼,光明正大伸手了?
    https://redis.io/docs/manual/transactions/
    richangfan
        2
    richangfan  
       150 天前
    时间窗口计数器,用来限流
    LeegoYih
        3
    LeegoYih  
       150 天前
    用事务的目的是什么,如果只是为保证多条命令原子性,可以用 lua 脚本
    LeeReamond
        4
    LeeReamond  
       150 天前   ❤️ 18
    @fkdog 显然 OP 是看过以后认为没什么用才来发帖,你不想答可以不答,我觉得没必要踩别人一句体现自己的优越感
    kindjeff
        5
    kindjeff  
       150 天前
    用 Redis 做分布式锁简直不要太常见
    sardina
        6
    sardina  
       150 天前 via iPhone
    @kindjeff 做分布式锁 用 redis 的事务吗
    luin
        7
    luin  
       150 天前   ❤️ 3
    个人感觉确实没啥用哈哈哈。之前公司的项目都是用 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
        8
    xhinliang  
       150 天前
    没什么用。尤其是对于 proxy 实现的集群,等同于摆设。
    javaisthebest
        9
    javaisthebest  
       150 天前
    没啥用,Redis 事务是一个假事务,不保证原子性。
    orzwalker111
        10
    orzwalker111  
       150 天前
    没用
    qinxi
        11
    qinxi  
       150 天前
    @sardina #6 redisson 里面应该是用的.
    qinxi
        12
    qinxi  
       150 天前
    @javaisthebest #9 假事务说的是不能回滚.并不是不保证原子吧
    crysislinux
        13
    crysislinux  
       150 天前 via Android
    事务确实没啥用了,基本上都用 lua 替代了
    MeteorCat
        14
    MeteorCat  
       150 天前 via Android
    实际日常很少用,都忘记有这个特性了
    securityCoding
        15
    securityCoding  
       150 天前
    基本不用,都在用 lua 了
    Mitt
        16
    Mitt  
       149 天前   ❤️ 1
    @LeeReamond #4 不知道你这个 “显然” 又是从何而来,毕竟楼主既没有说明自己看过也没列举自己的观点
    jack778
        17
    jack778  
       149 天前
    被 redis 事务坑过,你插入了一个值,然后马上查询居然查不到...
    roundgis
        18
    roundgis  
       149 天前 via Android
    從來沒用過

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