设为首页 收藏本站
查看: 929|回复: 0

[经验分享] memcached 02

[复制链接]

尚未签到

发表于 2015-9-1 12:12:23 | 显示全部楼层 |阅读模式
  下载客户端驱动,java客户端下载地址:http://code.google.com/p/memcached/wiki/Clients
  其他也没有什么好说的!



package com.fox;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
* @author huangfox
* @data 2012-8-1
* @email huangfox009@126.com
* @desc
*/
public class MemCached {
static MemCachedClient mcc = new MemCachedClient();
static MemCached mc = new MemCached();
static {
String[] servers = { "192.168.10.103:11211" };
Integer[] weights = { 3 };
// socke pool
SockIOPool pool = SockIOPool.getInstance();
// set server config
pool.setServers(servers);
pool.setWeights(weights);
// set other params
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaxIdle(1000 * 60 * 60 * 6);
// set main thread sleep
pool.setMaintSleep(30);
// set tcp params
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setSocketConnectTO(0);
// init
pool.initialize();
}
private MemCached() {
}
public static MemCached getInstance() {
return mc;
}
public boolean add(String key, Object value) {
return mcc.add(key, value);
}
public boolean replaced(String key, Object value) {
return mcc.replace(key, value);
}
public Object get(String key) {
return mcc.get(key);
}
public static void main(String[] f) {
MemCached cache = MemCached.getInstance();
cache.add("name", "huangfox");
System.out.println(cache.get("name"));
}
}

  
  几个关键类!(转自:http://www.linuxso.com/architecture/21013.html)
  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资源的浪费。




  • 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对计数器减量操作


  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108343-1-1.html 上篇帖子: PHP Fatal error: Class 'Memcached' not found 下篇帖子: [转]Memcached 协议中英文对照
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表