既有适合小白学习的零基础资料,也有适合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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**