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(一)的更多相关文章

  1. Java操作Memcached

    本文复制其他播客,有好的技术文章希望各位大神能告知... 谢谢. 如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; import j ...

  2. memcached—Java操作Memcached实例

    前面博客介绍了如何在Windows操作系统中安装Memcached,总结一下如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; imp ...

  3. Java操作memcache

    [本文出自天外归云的博客园] 准备工作 Java操作memcache需要spymemcache类库的支持,在Eclipse中修改maven项目的pom.xml文件—— 添加仓库: <reposi ...

  4. Redis基础知识、命令以及java操作Redis

    1 nosql的概念 sql:操作(关系型)数据库的标准查询语言 关系型数据库(rdbms):以关系(由行和列组成的二维表)模型为核心数据库,有表的储存系统.(mysql.oracle.sqlserv ...

  5. Redis-基本概念、java操作redis、springboot整合redis,分布式缓存,分布式session管理等

    NoSQL的引言 Redis数据库相关指令 Redis持久化相关机制 SpringBoot操作Redis Redis分布式缓存实现 Resis中主从复制架构和哨兵机制 Redis集群搭建 Redis实 ...

  6. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  7. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  8. Java操作Oracle

    public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...

  9. JAVA操作ORACLE数据库的存储过程

    一.任务提出 JAVA操作oracle11g存储过程实验需要完成以下几个实例: 1.调用没有返回参数的过程(插入记录.更新记录) 2.有返回参数的过程 3.返回列表的过程 4.返回带分页的列表的过程. ...

随机推荐

  1. Thinkphp常用标签

    告:在使用下列所说的任何标签库都需要 HTML第一行加入 <tarlib name=”cx,html” /> 如果想单独引入cx标签库就直接写成<tarlib name=”cx” / ...

  2. finger用户名、主目录、停滞时间、登录时间

    finger yum install finger    1.作用    finger用来查询一台主机上的登录账号的信息,通常会显示用户名.主目录.停滞时间.登录时间.登录Shell等信息,使用权限为 ...

  3. leetcode第一刷_Convert Sorted List to Binary Search Tree

    好,二叉搜索树粉末登场,有关他的问题有这么几个,给你一个n,如何求全部的n个节点的二叉搜索树个数?能不能把全部的这些二叉搜索树打印出来? 这道题倒不用考虑这么多,直接转即可了,我用的思想是分治,每次找 ...

  4. Centos 6.4 Linux 相关问题总结

    1.中文输入法安装 su root yum install "@Chinese Support" exit 然后设置Input Methord即可. 最后一步:logout,注意是 ...

  5. [Cocos2d-x v3.x]浅谈容器Vector

    转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853 前两天有人问我说在3.0 beta2版本号 ...

  6. JDBC批处理executeBatch

    JDBC运行SQL声明,有两个处理接口,一PreparedStatement,Statement,一般程序JDBC有多少仍然比较PreparedStatement 只要运行批处理,PreparedSt ...

  7. OpenStack Dashboard

    OpenStackDashboard 为管理员和普通用户提供了一个图形化管理界面.用户能够通过该界面訪问.分配或者自己主动化分配基于云的资源.可扩展的设计使得与第三方产品和服务融合变得非常easy,比 ...

  8. SQLServer 网络协议(一)

    SQLserver现在主要的3种协议:Shared Memory.TCP/IP 和 Named Pipe SharedMemory: Shared Memory最快最简单的协议,使用SharedMem ...

  9. 从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...

  10. springmvc如何访问静态文件,例如jpg,js,css

    你怎么DispatcherServlet拦截"*.do"这有一个后缀URL.就不存在訪问不到静态资源的问题.   假设你的DispatcherServlet拦截"/&qu ...