couchbase的CAS乐观锁问题是什么样的
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章给大家介绍couchbase的CAS乐观锁问题是什么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。场景:同步播放记录OPS: 30wcas问题CAS:Compare
千家信息网最后更新 2025年02月01日couchbase的CAS乐观锁问题是什么样的
这篇文章给大家介绍couchbase的CAS乐观锁问题是什么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
场景:同步播放记录OPS: 30w
cas问题CAS:Compare and Swap, 翻译成比较并交换。java.util.concurrent包中借助CAS实现了区别于synchronized同步锁的一种乐观锁。其原理是CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
/** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param expect the expected value * @param update the new value * @return {@code true} if successful. False return indicates that * the actual value was not equal to the expected value. */ public final boolean compareAndSet(int expect, int update) { return unsafe.compareAndSwapInt(this, valueOffset, expect, update); }
在高并发的场景下,写入couchbase会引起cas问题。即如果未使用cas,那么后写入的数据,会覆盖前面写入的数据。如果启用的cas,那么因为同时读到了一个数据,只有第一个会写入成功,其余的因为 compare and swap 失败,未能写入。
此处要注意,虽然couchbase客户端的upsert方法,虽然支持cas,但是写入的时候,如果cas错误,那么也不会抛出异常,要使用replace方法如下面两张图所示
当我们使用正确的cas之后,需要处理cas带来的数据一致性问题,这时候,我们可以采用各自的解决方案来解决。
本人采用的是redisson的getBlockingQueue的drainTo方法,配合定时任务,实现批处理。
延伸:cas问题在服务端,如果设计的不合理会引发aba问题,简言之首先X和Y同时处理数据X先将A 改为 B然后将B改为 A此时Y将A改为其他值,也是成功的。但是此时数据已经经过了A->B->A的变化所以这时候会引用一个单独的值,来唯一区分两个值是不一样的。比如uuid等。
关于couchbase的CAS乐观锁问题是什么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
问题
数据
乐观
内存
方法
成功
内容
同时
场景
更多
同步
处理
帮助
不错
相同
一致
简言之
一致性
两个
任务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
dnf架设 数据库帐号
政府绩效考核软件开发
官兵网络安全形势认识
通辽网络安全应急管理中心在哪
等保二级需要的网络安全设备
如何连接服务器
计算机考试模拟器数据库
犹他大学计算机学院软件开发
分布式文件服务器
郑州飞腾服务器批发
NHANES数据库怎么看懂
sql管理服务器
新华三软件开发是做什么的
《网络安全法》第三十八条
网络安全主题团会有感
数据库char的最大长度
软件开发合同 国标
和平区智能软件开发服务装饰
车用嵌入式软件开发指南
新时达电梯服务器故障代码
网络安全定级备案的要求
软件开发一个项目提成多少
信息网络安全高级工程师
网络安全大赛议程
湖北医院数显钟服务器
太原网络安全手抄报
上海智能照明软件开发服务
查看服务器网卡的uuid
网络安全法的配套法
软件开发项目毛利如何计算