引入jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.zno</groupId>
<artifactId>memcached-test</artifactId>
<version>0.0.1-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.danga</groupId>
<artifactId>java-memcached</artifactId>
<version>2.6.3</version>
</dependency>
</dependencies>
</project>

配置Beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="com.danga.MemCached.SockIOPool" factory-method="getInstance"
init-method="initialize" destroy-method="shutDown">
<constructor-arg>
<value>my-memcachedPool</value>
</constructor-arg>
<property name="servers">
<list>
<value>172.16.50.238:11211</value>
<value>172.16.162.248:11211</value>
</list>
</property>
<!-- 初始化连接为20 -->
<property name="initConn">
<value>20</value>
</property>
<!-- 最小连接为5 -->
<property name="minConn">
<value>7</value>
</property>
<!-- 最大连接为100 -->
<property name="maxConn">
<value>10000</value>
</property>
<!-- 平衡线程休眠时间为30ms -->
<property name="maintSleep">
<value>30</value>
</property>
<!-- Nagle标志为false -->
<property name="nagle">
<value>false</value>
</property>
<!-- 响应超时时间为3000ms -->
<property name="socketTO">
<value>3000</value>
</property>
</bean>
<bean class="com.danga.MemCached.MemCachedClient">
<constructor-arg>
<value>my-memcachedPool</value>
</constructor-arg>
</bean> </beans>

测试类

import java.util.Date;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.danga.MemCached.MemCachedClient; public class Test { public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("Beans.xml"); MemCachedClient client = ctx.getBean(MemCachedClient.class); System.out.println(client.add("xiaoming", "0", new Date(60 * 1000)));
System.out.println(client.add("xiaoming1", "0", new Date(60 * 1000)));
System.out.println(client.add("xiaoming", "0", new Date(60 * 1000)));
// System.out.println(client.get("xiaoming"));
System.out.println(client.add("xiaoming", "0", new Date(60 * 1000))); } }

验证结论:

/*
======== 单节点 add 测试 ============
测试结果:
1. telnet 172.16.50.238 11211 不通时,返回 false
2. telnet 172.16.50.238 11211 通时 ,数据不存在时,返回 true
3. telnet 172.16.50.238 11211 通时 ,数据已存在时,返回 false ==========多节点 [A:172.16.50.238 11211]
[B:172.16.162.248 11211] add 测试============
测试用例123:
1. [AB通] 时数据不存在时true,数据存在时false 2. 运行过程中有节点不可用
System.out.println(client.add("xiaoming", "0", new Date(60*1000))); // 哈希应该存至A ,A通,返回true
System.out.println(client.add("xiaoming1", "0", new Date(60*1000)));// 哈希应该存至B ,B通,返回true
System.out.println(client.add("xiaoming", "0", new Date(60*1000))); // 哈希应该存至A ,A不通 ,返回false ,A节点移除,哈希算法改变。 !上一行的注释! 也可用get方法代替,交互一次就可以判断节点是否可用。
System.out.println(client.add("xiaoming", "0", new Date(60*1000))); // 哈希算法存至B ,B通,返回true 3. 启动前A节点不可用
哈希算法都存至B */

补充:

如果有AB两节点,B节点停止服务,则之前哈希至B的都哈希至A(但是每次都有稍微卡顿,具体可能是判断该服务可用不可用);当B节点再次提供服务时,则哈希至B(无卡顿)。

MemCachedClient 节点失效时的处理的更多相关文章

  1. kubernetes node节点失效 调度

    kubernetes 配置: 测试node挂 机,发布需要等几分才会 在其它 的node机器 启动,这个明显不合理,对于大多数业务 kube-controller-manager配置: /etc/sy ...

  2. memcached缓存失效时的高并发访问问题解决

    memcached一般用于在访问一些性能相对低下的数据接口时(如数据库),为了保证这些数据接口的稳定性,加上memcached以减少访问次数,保证这些数据接口的健壮性.一般memcached的数据都是 ...

  3. 秋色园QBlog技术原理解析:性能优化篇:缓存总有失效时,构造持续的缓存方案(十四)

    转载自:http://www.cyqdata.com/qblog/article-detail-38993 文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文 ...

  4. embed元素 autostart false 失效时的解决方法

    embed元素 autostart false 失效时的解决方法 最近在工作中碰到了在网页中嵌入播放器播放声音文件的需求,最后使用了embed元素 代码如下: <embed src='1093. ...

  5. iframe中请求页面而session失效时页面跳转问题

    iframe中请求页面而session失效时页面跳转问题 分类: Web2009-12-11 15:01 656人阅读 评论(0) 收藏 举报 sessioniframejsp 有时候做了就忘了,我记 ...

  6. CDN失效时使用本地js文件:window.jQuery || document.write

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></ ...

  7. zookeeper 节点启动时的更新机制

    使用zk的应用节点和zk数据本身的同步,当系统启动时使用zk配置的信息和zk本身存储不一致, 此时应存在一个更新机制将应用配置数据和zk数据更新一致. 启动时更新拉取zk配置中心的更新本地数据,以zk ...

  8. RabbitMQ镜像模式双节点部署时故障转移过程中队列中消息的状态

    场景 现有节点Node1和Node2,建立Exchange:yu.exchange,创建队列yu1.queue镜像队列master位于Node1,yu2.queue镜像队列位于Node2,使用topi ...

  9. 当调用List Remove 失效时 [C#] .

    有没有试过从一个集合里面移除一个对象之后,这个集合仍然留有这个对象?世界之大,无奇不有.稍有疏忽,便会导致这种奇怪的现象.现在让我们看看这个“不死”对象究竟是怎么一回事. 1.“不死”对象现身 这个问 ...

随机推荐

  1. ubuntu 安装 selenium selenium操作 chrome

    重装虚拟机,好多包需要重装,sele这个记得当时就找了好久的完整重装方法,这次又找了好久,,,省的下次再这样,记录下来..... ubuntu16.04 4安装seleniumsudo pip ins ...

  2. MVC 发布到IIS中的配置方法

    MVC 发布到IIS中的配置方法  http://msdn.microsoft.com/zh-cn/library/gg703322(v=vs.98).aspx

  3. python 刷题必备

    1.判断输入的数字是否是回文数: 学习内容:把数字转成字符串 1. def is_palindrome(n): n=str(n) m=n[::-1] return n==m 2. tmp_str = ...

  4. python引入模块时import与from ... import的区别(转)

    import datetime是引入整个datetime包,如果使用datetime包中的datetime类,需要加上模块名的限定. 1 import datetime 2 3 print datet ...

  5. python 形参

    def fun(x="dx",y="dy"): print "fun------" print x print y fun()fun(&qu ...

  6. Linux就业技术指导(四):企业CDN缓存加速原理解密

    1.1 CDN(网站加速) 1.1.1 什么是CDN CDN的全称Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和 ...

  7. edgeR

    1)简介 edgeR作用对象是count文件,rows 代表基因,行代表文库,count代表的是比对到每个基因的reads数目.它主要关注的是差异表达分析,而不是定量基因表达水平. edgeR wor ...

  8. Android通过DeepLink方式跳转其他App传递参数

    网上对于安卓DeepLink方式跳转传递参数的例子较少,说的也不客观,实践之后发现还是有一些坑.其实为什么要用DeepLink方式跳转,有些是因为引流的原因,他们希望通过网页就能直接跳转到App的界面 ...

  9. VB 共享软件防破解设计技术初探(二)

    VB 共享软件防破解设计技术初探(二) ×××××××××××××××××××××××××××××××××××××××××××××× 其他文章快速链接: VB 共享软件防破解设计技术初探(一)http ...

  10. 使用git提交代码到GitHub

    0.下载Git Bash,在Windows系统可以用Git Bash通过简单的命令将代码提交到GitHub1.打开项目所在的文件夹,右键,"Git Bash Here"2.初次使用 ...