Memcached Java Client API详解

针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemCachedClient?,关键类及方法整理说明如下。

SockIOPool

这个类用来创建管理客户端和服务器通讯连接池,客户端主要的工作包括数据通讯、服务器定位、hash码生成等都是由这个类完成的。

public static SockIOPool getInstance()

获得连接池的单态方法。这个方法有一个重载方法getInstance( String poolName ),每个poolName只构造一个SockIOPool实例。缺省构造的poolName是default。

如果在客户端配置多个memcached服务,一定要显式声明poolName。

public void setServers( String[] servers )

设置连接池可用的cache服务器列表,server的构成形式是IP:PORT(如:127.0.0.1:11211)

public void setWeights( Integer[] weights )

设置连接池可用cache服务器的权重,和server数组的位置一一对应

其实现方法是通过根据每个权重在连接池的bucket中放置同样数目的server(如下代码所示),因此所有权重的最大公约数应该是1,不然会引起bucket资源的浪费。

for ( int i = 0; i < servers.length; i+/+ ) { if ( this.weights /!= null && this.weights.length > i ) { for ( int k = 0; k < this.weights[i].intValue(); k+/+ ) { this.buckets.add( servers[i] ); if ( log.isDebugEnabled() ) log.debug( "++++ added " + servers[i] + " to server bucket" ); } }

public void setInitConn( int initConn )

设置开始时每个cache服务器的可用连接数

public void setMinConn( int minConn )

设置每个服务器最少可用连接数

public void setMaxConn( int maxConn )

设置每个服务器最大可用连接数

public void setMaxIdle( long maxIdle )

设置可用连接池的最长等待时间

public void setMaintSleep( long maintSleep )

设置连接池维护线程的睡眠时间

设置为0,维护线程不启动

维护线程主要通过log输出socket的运行状况,监测连接数目及空闲等待时间等参数以控制连接创建和关闭。

public void setNagle( boolean nagle )

设置是否使用Nagle算法,因为我们的通讯数据量通常都比较大(相对TCP控制数据)而且要求响应及时,因此该值需要设置为false(默认是true)

ublic void setSocketTO( int socketTO )

设置socket的读取等待超时值

public void setSocketConnectTO( int socketConnectTO )

设置socket的连接等待超时值

public void setAliveCheck( boolean aliveCheck )

设置连接心跳监测开关。

设为true则每次通信都要进行连接是否有效的监测,造成通信次数倍增,加大网络负载,因此该参数应该在对HA要求比较高的场合设为TRUE,默认状态是false。

public void setFailback( boolean failback )

设置连接失败恢复开关

设置为TRUE,当宕机的服务器启动或中断的网络连接后,这个socket连接还可继续使用,否则将不再使用,默认状态是true,建议保持默认。

public void setFailover( boolean failover )

设置容错开关

设置为TRUE,当当前socket不可用时,程序会自动查找可用连接并返回,否则返回NULL,默认状态是true,建议保持默认。

public void setHashingAlg( int alg )

设置hash算法

alg=0 使用String.hashCode()获得hash code,该方法依赖JDK,可能和其他客户端不兼容,建议不使用

alg=1 使用original 兼容hash算法,兼容其他客户端

alg=2 使用CRC32兼容hash算法,兼容其他客户端,性能优于original算法

alg=3 使用MD5 hash算法

采用前三种hash算法的时候,查找cache服务器使用余数方法。采用最后一种hash算法查找cache服务时使用consistent方法。

public void initialize()

设置完pool参数后最后调用该方法,启动pool。

MemCachedClient?

public void setCompressEnable( boolean compressEnable )

设定是否压缩放入cache中的数据

默认值是ture

如果设定该值为true,需要设定CompressThreshold?

public void setCompressThreshold( long compressThreshold )

设定需要压缩的cache数据的阈值

默认值是30k

public void setPrimitiveAsString( boolean primitiveAsString )

设置cache数据的原始类型是String

默认值是false

只有在确定cache的数据类型是string的情况下才设为true,这样可以加快处理速度。

public void setDefaultEncoding( String defaultEncoding )

当primitiveAsString为true时使用的编码转化格式

默认值是utf-8

如果确认主要写入数据是中文等非ASCII编码字符,建议采用GBK等更短的编码格式

cache数据写入操作方法

set方法

将数据保存到cache服务器,如果保存成功则返回true

如果cache服务器存在同样的key,则替换之

set有5个重载方法,key和value是必须的参数,还有过期时间,hash码,value是否字符串三个可选参数

add方法

将数据添加到cache服务器,如果保存成功则返回true

如果cache服务器存在同样key,则返回false

add有4个重载方法,key和value是必须的参数,还有过期时间,hash码两个可选参数

replace方法

将数据替换cache服务器中相同的key,如果保存成功则返回true

如果cache服务器不存在同样key,则返回false

replace有4个重载方法,key和value是必须的参数,还有过期时间,hash码两个可选参数

建议分析key的规律,如果呈现某种规律有序,则自己构造hash码,提高存储效率

cache数据读取操作方法

使用get方法从cache服务器获取一个数据

如果写入时是压缩的或序列化的,则get的返回会自动解压缩及反序列化

get方法有3个重载方法,key是必须的参数,hash码和value是否字符串是可选参数

使用getMulti方法从cache服务器获取一组数据

get方法的数组实现,输入参数keys是一个key数组

返回是一个map

通过cache使用计数器

使用storeCounter方法初始化一个计数器

使用incr方法对计数器增量操作

使用decr对计数器减量操作

Memcached Client API 优化(草)

实现memcached的遍历操作

有些应用情况下,需要遍历memcached服务器中所有被cache的数据,目前memcached client API不支持遍历操作,需要进行扩展。

实现get时刷新数据过期时间(应用于session,可能需要修改服务器端程序)

当memcached被用作session服务器的时候,需要支持session的access方法,根据最近访问时间刷新过期时间,目前memcached也不支持该操作,需要进行扩展。

memcached java api_Memcached Java Client API详解相关推荐

  1. Memcached Java Client API详解

    针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...

  2. mq 接口 java_Rabbitmq Java Client Api详解

    AMQP AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现. 基础概念快速入门 每个rabbitmq-server叫做一个Broker,等着tcp连接进入. 在rabbi ...

  3. java docur,JavaDoc生成API详解

    一.综述 1.1 简介 Javadoc 是 Java 自带的一种工具,其可以从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档.也就是说,只要在编写程序时以一套特定的标记[Ta ...

  4. java中通物流api详解

    前言:中通一共有2种类型的物流接口,分别是总对总.预约寄件接口.刚开始普通公司都是用我下面这套预约寄件接口的:只有等你寄件数量达到某一个数量就会有中通工作人员联系你切换物流接口,也就是让你用总对总的接 ...

  5. mahout java api_Mahout推荐算法API详解

    前言 用Mahout来构建推荐系统,是一件既简单又困难的事情.简单是因为Mahout完整地封装了"协同过滤"算法,并实现了并行化,提供非常简单的API接口:困难是因为我们不了解算法 ...

  6. java 调用foxmail_JavaMail(JAVA邮件服务) API详解

    5.回复邮件回复邮件的方法很简单:使用Message类的reply()方法,通过配置回复邮件的收件人地址和主题(如果没有提供主题的话,系统将默认将"Re:"作为邮件的主体),这里不 ...

  7. Java 11中的新功能和API详解系列1

    Java 11中的新功能和API详解系列1 2018.9.27 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. JDK 11在语言语法方面有一个小改动,增加了相当数量的新API,以及 ...

  8. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  9. java nio详解,Java NIO API详解

    Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...

  10. Java 8 Stream API详解

    Java 8 Stream API详解 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStrea ...

最新文章

  1. JAVA WEB 乱码问题解决方案
  2. RAC 实例不能启动 ORA-1589 signalled during ALTER DATABASE OPEN
  3. 原理分析之四:一次SQL查询的源码分析
  4. 华为鸿蒙手机beta版,鸿蒙2.0 Beta手机版来了!明年将全面支持华为手机
  5. 网站三级分销数据库如何设计,简单案例
  6. svn: E180001: Unable to open an ra_local session to URL问题解决方案
  7. Fragment的知识总结
  8. End Game----OO最后一次博客作业
  9. 超详细!在我的世界(MC)中使用cocricot模组搭建一个咖啡厅
  10. python一共多少模块,python常见模块有哪些
  11. 微信演示制作软件易企秀的上手体验(图文)
  12. js中如何解决跨域问题
  13. Java文件上传接口
  14. Mac os查看共享文件
  15. 10个提升效率的编程好习惯
  16. 什么是网页源代码和网站的源代码
  17. **DNS中A记录和CNAME记录的区别(转)
  18. Z-Wave 700 秘钥生成、固件签名、及OTA过程
  19. 莫顿码(Morton code)介绍
  20. 华为网络安全论述题解析(2)

热门文章

  1. Apache Commons CLI 开发命令行工具示例
  2. 触发器的创建和使用(sql2005)
  3. 这些大学,推迟返校!
  4. 阿里云windows 2012服务器部署java web程序教程
  5. react 属性与状态 学习笔记
  6. 字符串模式匹配sunday算法
  7. 关于NDK及安装使用
  8. 【C#】通过正则表达式对TextBox进行校验
  9. APS傻瓜教材读后感之为什么需要人机交互调度
  10. 【从C到C++学习笔记】内联成员函数/成员函数重载及缺省参数