java - 在redis中,需要获取当前值,然后再决定以后的行为,这个过程需要原子性,如何实现?
PHP中文网
PHP中文网 2017-04-17 15:49:14
[Java讨论组]

初步看来,需要使用redis事务,然而redis事务中的命令并不立即不执行,无法获取当前的数据。
可有其他的解决办法?

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
迷茫

开发中正好遇到,场景是需要控制对用户的账号余额进行扣费操作,所以需要先读取原值,减去,再更新。
使用了watch,以及mutil和exec组合,首先你需要watch需要操作的key,然后读取key的值,计算好新值,然后执行mutil开启事务,执行set命令更新key值,再执行exec提交事务,如果key的值在你watch之后exec之前有发生变化,那么你的set就不会执行成功,未变化可以执行成功。
这样就可以保证原子性了。

天蓬老师

nosql不支持事务
但是我们可以模拟事务
比如读的时候给一个key赋值位1
写完以后再赋值为0。
每次操作都去判断这个key的的值

阿神

可以结合 setnx 或者watch

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号