Memcached CAS协议_java_memcached cas(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

Memcached CAS协议


介绍

CAS(Check And Set)检查后再赋值,是为了解决多线程并发问题而设计的一种解决方案。

Memcached于1.2.4版本新增CAS(Check and Set)协议类似于Java并发的CAS(Compare and Swap)
原子操作,处理同一key被多个线程更改过程的并发问题。

在Memcached中,每个key关联有一个64-bit长度的long型惟一数值,表示该key对应value的版本号。
这个数值由Memcached server产生,从1开始,且同一Memcached server不会重复。

在两种情况下这个版本数值会加:
    1、新增一个key-value对
    2、对某已有key对应的value值更新成功
    备注:删除key版本值不会减小 


备注就相当于版本号,但是memcached的版本号管理并不是针对每个key都有一个版本号维护的。
并且每次取版本号是取对应key值的最新版本号(注意不是取整个memcached服务器里的最新版本号)。

CAS协议解决的问题

假如现在有ClientA和ClientB都连接到同一台memcached服务器,此时ClientA对key进行更新操作,
set key="AAA",此时ClientA想读取出key的值,期望值应该是"AAA",但是在取出值之前ClientB
又对key进行了更新操作,set key="BBB",那么ClientA取出的数据就不是自己期望的"AAA"而是"BBB"了,
导致这种问题原因就是ClientA它不知道key已经被ClientB修改了这样就可能导致业务处理出错。
这就是并发场景下会遇到的问题。


CAS协议解决这种并发修改问题。有线程试图修改当前key-value对的value时,先由gets方法得到
key的版本号,操作完成提交数据时,使用cas方法谨慎变更,如果在本地对key操作过程中这个key-value
对在Memcached server端被其它线程更改过,就放弃此次修改(乐观锁概念)。


memcached client 使用CAS

/**
 * 基于net.spy.memcached客户端使用CAS操作。
 * 
 * @author xuyi3
 * @2016年7月1日 @上午11:23:09
 * @VersionTest
 * @功能说明:<br>
 * @春风十里不如你
 * @备注
 */
public class VersionAppMain {

public static void main(String[] args) {
        // 获得memcached连接


![img](https://img-blog.csdnimg.cn/img_convert/b38329de5a360ab1dcf54e97c4fbbdf6.png)
![img](https://img-blog.csdnimg.cn/img_convert/4b5cd921412f922d3d75788536f9801c.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

1832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值