Java操作memcached(一)
Memcached事实上,两次Hash算法
第一次hash算法被用于定位Memcached示例
第二次hash算法是底部HashMap中间hash算法
Hash算法
1.依据余数来进行计算(事实上java中的HashMap的hash算法也是用的这样的方式)
2.一致性hash算法
C的client --->libMemcached已经实现了该功能,C的开发者直接使用它。
新浪----->Memcachedb 实现了持久化功能
java的client
a官方的 memcached client for java
比較稳定
用了jdk比較早的版本号。性能稍差,而且使用的BIO
b.spyMemcached
NIO,线程池框架
一致性hash
稳定性差,报timeout异常
c.xMemcached
java nio
java 线程池
性能比spyMemcached要好
而且比較稳定,且和spring等框架可以非常好的结合使用
一致性hash
d.淘宝包装的javaclient
java nio
线程池框架
cluster机制
结合本地缓存
接下来我们使用第一种
这是须要的jar
package com.chengxi.memc.test; import org.junit.Test; import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool; public class MemcachedTest01 {
@Test
public void testOne() throws Exception { MemCachedClient client = new MemCachedClient();
//memserver地址
String[] addr = {"192.168.0.140:11211"};
//相应的权重
Integer[] weight = {3};
SockIOPool pool = SockIOPool.getInstance(); pool.setServers(addr);
pool.setWeights(weight);
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(200);
pool.setMaxIdle(1000*30*30);
pool.setMaintSleep(30); //socket param timeout
pool.setNagle(false);
pool.setSocketTO(30);
pool.setSocketConnectTO(0); //start
pool.initialize(); //client.set("name", "wzh");
//System.out.println(client.get("name"));
Student student = new Student();
student.setId(1);
student.setName("呵呵"); client.set("student1",student); System.out.println(client.get("student1"));
} @Test
public void two(){
MemCachedClient client = new MemCachedClient();
//memserver地址
String[] addr = {"192.168.0.140:11211","192.168.0.140:11212"};
//相应的权重
Integer[] weight = {5,5};
SockIOPool pool = SockIOPool.getInstance(); pool.setServers(addr);
pool.setWeights(weight);
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(200);
pool.setMaxIdle(1000*30*30);
pool.setMaintSleep(30); //socket param timeout
pool.setNagle(false);
pool.setSocketTO(30);
pool.setSocketConnectTO(0); //start
pool.initialize(); for(int i = 0;i<10;i++){
client.set("test"+i,"test"+i);
} }
}
官方的jar包实现了 哈希一致性
也就是说 上面的 two的方法 分别将test0-9 存进了两台memserver中
假设当中一台宕机了 获取数据的时候不会影响另外一台
假设没有实现一致哈希的话 就会影响其它server 导致全部的数据无法获取
package com.chengxi.memc.test;
import java.io.Serializable;
public class Student implements Serializable {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "[id:"+this.id+",name"+this.name+"]";
}
}
这是实体类 为了实现系列化
版权声明:本文博主原创文章,博客,未经同意不得转载。
Java操作memcached(一)的更多相关文章
- Java操作Memcached
本文复制其他播客,有好的技术文章希望各位大神能告知... 谢谢. 如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; import j ...
- memcached—Java操作Memcached实例
前面博客介绍了如何在Windows操作系统中安装Memcached,总结一下如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; imp ...
- Java操作memcache
[本文出自天外归云的博客园] 准备工作 Java操作memcache需要spymemcache类库的支持,在Eclipse中修改maven项目的pom.xml文件—— 添加仓库: <reposi ...
- Redis基础知识、命令以及java操作Redis
1 nosql的概念 sql:操作(关系型)数据库的标准查询语言 关系型数据库(rdbms):以关系(由行和列组成的二维表)模型为核心数据库,有表的储存系统.(mysql.oracle.sqlserv ...
- Redis-基本概念、java操作redis、springboot整合redis,分布式缓存,分布式session管理等
NoSQL的引言 Redis数据库相关指令 Redis持久化相关机制 SpringBoot操作Redis Redis分布式缓存实现 Resis中主从复制架构和哨兵机制 Redis集群搭建 Redis实 ...
- Java操作Sqlite数据库-jdbc连接
Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
- Java操作Oracle
public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...
- JAVA操作ORACLE数据库的存储过程
一.任务提出 JAVA操作oracle11g存储过程实验需要完成以下几个实例: 1.调用没有返回参数的过程(插入记录.更新记录) 2.有返回参数的过程 3.返回列表的过程 4.返回带分页的列表的过程. ...
随机推荐
- A Game of Thrones(3) - Daenerys
Her brother held the gown up for her inspection. “This is beauty. Touch it. Go on. Caress(爱抚,抚抱) the ...
- Oracle自增列创建方法
最近在做Oracle的项目,由于以前没有接触过Oracle的开发,遇到了不少的问题,比如给Oracle表添加自增列,与SQL Server就不同. Oracle没有自增字段这样的功能,但是通过触发器( ...
- 【HDU】5248-序列变换(贪心+二分)
二分枚举长度改变的长度即可了 #include<cstdio> #include<cstring> #include<algorithm> using namesp ...
- hdu4734(数位dp)
hdu4734 给定 a和b, 问区间[0,b]内有多少个数字的f(i) <=f(a) dp[i][s] 表示i位的数字的f<=s 所以比如如果第i+1位选择数字5之后, 那么只要剩下的i ...
- json级联城市
代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> < ...
- 安装好.net framework后运行慢
表现 系统有时运行慢,尤其是.net程序运行得相当慢 mscorsvw.exe与mscorsvw.exe *32两个进程挂在任务管理器里时不时地占着CPU 解决 运行以下两条命令,加快这两进程的运行, ...
- Windows Phone开发(17):URI映射
原文:Windows Phone开发(17):URI映射 前面在讲述导航的知识,也讲了控件,也讲了资源,样式,模板,相信大家对UI部分的内容应该有了很直观的认识了.那么今天讲什么呢?不知道大家在练习导 ...
- 同一个存储过程中,不能多次select into 到同一张表的问题
表记录的插入方式有两种.其一,先create table 再 insert into from ....其二, 直接 select into. 第一种方式,由于要记录日志,因此IO消耗更多,durat ...
- Scripting Java #3:Groovy与invokedynamic
只需看看今天Groovy语言实现机制.在此之前,是第一个推倒静态类型与动态类型语言在实现上面的一些差异. 静态类型 vs. 动态类型 看以下这个简单的栗子. def addtwo(a, b) { re ...
- Linux System Programming note 8 ——File and Directory Management
1. The Stat Family #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> ...