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. String的Split方法的用法与要注意事项

    转自:http://shukuiyan.iteye.com/blog/1058672 之前在http://shukuiyan.iteye.com/blog/507915文中已经叙述过这个问题,但是最近 ...

  2. js实现的侧边栏展开收缩效果

    原文地址:http://www.softwhy.com/forum.php?mod=viewthread&tid=12246 <!DOCTYPE html> <html> ...

  3. C# 通信学习笔记

    C# 通信学习笔记 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不 ...

  4. dede时间格试,dede时间标签

    dede的日期时间格式[field:pubdate function='strftime("时间",@me'/]这个是固定格式,(利用strftime()函数格式化时间),因些只需 ...

  5. ubuntu下安装java和eclipse

    java安装 1 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 2 ...

  6. Learning To Rank之LambdaMART前世今生

    1.       前言 我们知道排序在非常多应用场景中属于一个非常核心的模块.最直接的应用就是搜索引擎.当用户提交一个query.搜索引擎会召回非常多文档,然后依据文档与query以及用户的相关程度对 ...

  7. 隐马尔科夫模型(HMM)及事实上现

    马尔科夫模型 马尔科夫模型是单重随机过程,是一个2元组:(S,A). 当中S是状态集合,A是状态转移矩阵. 仅仅用状态转移来描写叙述随机过程. 马尔科夫模型的2个如果 有限历史性如果:t+l时刻系统状 ...

  8. Thinkpad X200 屏幕备案

    妈妈蛋,屏幕废物前几天(闪屏->暗->变暗),因此,它只能监视房外 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk2NTg5MA= ...

  9. LightOj 1148 Basic Math

    1148 - Mad Counting PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB Mob ...

  10. 同台电脑部署多组Tomcat负载均衡(或集群)

    可能这种需求比较少见,不过如果手上服务器不够用.可以考虑先这么干着.. 具体Tomcat怎么搭集群,就不在这细说了.只写同台电脑部署多组集群需要修改和注意的地方. 一.Apache 先是Apache, ...