Redis 乐观锁的实际使用场景是什么?是不是没用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Richard14

Redis 乐观锁的实际使用场景是什么?是不是没用?

  •  1
     
  •   Richard14 Apr 15, 2022 2887 views
    This topic created in 1481 days ago, the information mentioned may be changed or developed.

    如题,redis 通过 watch/multi 事务实现乐观锁,通过 setnx 实现悲观锁,大概看了看介绍感觉乐观锁没啥用啊,因为 redis 的事务只保证连续执行而不保证原子执行,事务里的操作可以有若干步成功加若干步失败同时存在,那还有啥用呢?

    个人看法下乐观锁的使用场景是,首先需要是分布节点同步状态,单节点下无需使用 redis 同步。其次该需求需要上锁,且乐观锁能解决,且乐观锁方案效率比悲观锁高。想了一圈没想出来啥场景符合上述要求。

    A. 比如一个普通的多进程同步状态需求,比如对以账号为单位对接口进行流量限制,那么统计一个账号访问过一个接口,只需要给该账号对应的 key 执行 incr 就可以表示访问次数+1 ,由于本身是原子的, 多个节点同时执行也不存在需不需要锁的问题。

    B. 再比如网上常见举例的秒杀需求,比如 10000 个线程选出 10 个秒杀成功的。只需要将 token 设为 10 ,然后每个线程里 decr 不就行了,由于 decr 返回的是执行成功后的结果,10000 个线程分别获取的值将会是 10 到-9990 ,只需要业务线程判断自己的回文是否大于 0 不就可以判断自己是否成功抢到了秒杀,同样也不需要锁。

    所以 redis 的乐观锁有啥用?

    =========================

    顺便吐槽一下 redis 在 py 的支持,官方支持搞了个同步库,既然用 redis 了肯定是注重效率的应用,搞同步是不是完全没人用。。。异步版本最近才加入,我试了半天也没试明白异步下如何成功调用 watch+multi 事务。。。

    3 replies    2022-04-16 20:39:59 +08:00
    ipwx
        1
    ipwx  
       Apr 15, 2022
    既然用 redis 了肯定是注重效率的应用
    ----

    非也非也,可能只是不适用 DB 的场景。比如实时数据推送
    Richard14
        2
    Richard14  
    OP
       Apr 16, 2022
    @ipwx 确实。。不过就算是消息推送类应用,使用同步逻辑总归感觉是非常怪。。
    ipwx
        3
    ipwx  
       Apr 16, 2022
    @Richard14 写起来容易而已嘛( lol )
    About     Help     Advertise     Blog     API     FAQ     Solana     2766 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 09:31 PVG 17:31 LAX 02:31 JFK 05:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86