zoukankan      html  css  js  c++  java
  • Memcache的使用

    引用:http://hi.baidu.com/willian_zy/item/3d3d3758e23aa9c8d2e10c1d    

    在一些对数据读取速度要求较高的系统中,二级缓存无疑是必须的,他可以将一些常用而又不常更新的数据缓存起来,减少了与数据库直接交互的次数,这样显然提高了速度!为了积累自己的知识,我就将它的用法记录下来,以便于日后使用!

    1.安装Memcache客户端,好像没有Windows版本的,具体安装方法gg去!

    2.将源码直接导入项目中(方便修改)

    3.建立一个Cache操作类,里面需要如下代码:

    private String config = "config/memcached_cluster.xml";//这个是集群配置文件的路径
    private String cacheName = "mclient0";//这个是配置文件中一个client节点的名称,和配置文件一致
    private ICacheManager<IMemcachedCache> manager;//用于创建和打开Cache
    private IMemcachedCache cache;//用于get、set操作

    ......

    manager = CacheUtil.getCacheManager(IMemcachedCache.class, MemcachedCacheManager.class.getName());//获取CacheManager的接口类
       manager.setConfigFile(config);//设置配置文件
       manager.start();//启动
       cache = manager.getCache(cacheName);//获取配置在memcached.xml中的Cache客户端

    到这一步就已经可以使用cache了。下面是各种用法:

    object = cache.put(key, value); //存入缓存,不设置过期

    object = cache.put(key, value,expiry);//存入缓存,设置过期,expiry为java.util.Date类型

    object = cache.put(key, value,TTL);//存入缓存,设置过期,TTL为int类型

    object = cache.get(key);//由缓存获取值,不放入本地缓存

    object = cache.get(key,localTTL);//由缓存获取值,放入本地缓存

    cache.remove(key);//移出缓存

    cache.replace(key, value);//替换

    我们来看看集群的配置文件:

    这个是基本配置

    <?xml version="1.0" encoding="UTF-8"?>
    <memcached>
    <client name="mclient0" compressEnable="true"
       defaultEncoding="UTF-8" socketpool="pool0">
       <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
    </client>
    <socketpool name="pool0" failover="true" initConn="5" minConn="5"
       maxConn="250" maintSleep="5000" nagle="false" socketTO="3000"
       aliveCheck="true">
       <servers>10.2.224.36:33001,10.2.224.46:33001</servers>
       <weights>3,7</weights>
    </socketpool>
    </memcached>

    1.       创建memcached的标签。

    2.       创建 client的标签。

    注意:

    name 属性是程序中使用Cache的唯一标识。

    socketpool 属性将会关联到后面的socketpool配置。

    errorHandler 可选,用来处理出错情况。注意在Tag中不要使用空格或者Tab键。

    3.       创建socketpool的标签。

    注意:

    name 属性和client 配置中的socketpool 属性相关联。

    maintSleep属性是后台线程管理SocketIO池的检查间隔时间,如果设置为0,则表明不需要后台线程维护SocketIO线程池,默认需要管理。

    socketTO 属性是Socket操作超时配置,单位ms。

    aliveCheck 属性表示在使用Socket以前是否先检查Socket状态。

    4.       创建 servers 标签作为socketPool的子标签.设置memcache服务端实例地址,支持多个地址设置,例如“10.2.224.36:33001” 或 “10.2.224.36:33001, 10.2.224.46:33002”.

    5.       创建 weights 标签作为socketPool的子标签(可选),它表明了上面设置的服务器实例的Load权重. 例如 <weights>3,7</weights> 表示30% load 在 10.2.224.36:33001, 70% load 在 10.2.224.46:33001

    <?xml version="1.0" encoding="UTF-8"?>
    <memcached>
    <client name="mclient0" compressEnable="true"
       defaultEncoding="UTF-8" socketpool="pool0">
       <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
    </client>
    <client name="mclient0-bck" compressEnable="true"
       defaultEncoding="UTF-8" socketpool="pool0-bck">
       <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
    </client>
    <socketpool name="pool0" failover="true" initConn="5" minConn="5"
       maxConn="250" maintSleep="5000" nagle="false" socketTO="3000"
       aliveCheck="true">
       <servers>222.73.242.68:11211,222.73.242.68:11311</servers>
    </socketpool>
    <socketpool name="pool0-bck" failover="true" initConn="5"
       minConn="5" maxConn="250" maintSleep="5000" nagle="false"
       socketTO="3000" aliveCheck="true">
       <servers>222.73.242.68:11411</servers>
    </socketpool>

    <cluster name="cluster1" mode="active">//mode = active,standby
       <memCachedClients>mclient0, mclient0-bck</memCachedClients>
    </cluster>
    </memcached>

    Memcache是集中式的Cache,因此它存在单点问题。为了解决单点问题,Memcache客户端支持配置集群,如果配置两个或者多个客户端在一个集群中,那么将数据放入任何一个集群的客户端中,都可以从其他集群中的客户端获取到数据(在获取数据时将会根据key作Hash算法来选择集群的客户端为程序服务,实现类似于分布式节点的功能)

             集群配置很简单. 1.创建cluster标签 2. 创建memCachedClients 标签作为cluster的子标签,然后将客户端配置到memCachedClients 标签中。3.可以配置cluster mode,active支持多个节点可以修复性复制(不过会影响一点性能),standby不支持节点修复性复制。两者就是冷备份和热备份的区别。(节点修复性复制指的是当A,B两台机器作为集群的时候,如果A出现了问题,系统会去B获取数据,当A正常以后,如果应用在A中没有拿到数据可以去B获取数据,并且复制到A上,这种方式也是一种lazy的复制。)

    这是下载地址:http://code.google.com/p/memcache-client-forjava/

    个人能力有限,如果有错请纠正!

  • 相关阅读:
    【转载】apache kafka系列之-监控指标
    自动恢复被挂掉的hbase region server
    beeline连接hive server遭遇MapRedTask (state=08S01,code=1)错误
    sqoop-1.4.6安装配置
    spark RDD的元素顺序(ordering)测试
    【转载】常用Maven插件介绍
    【转载】Spark SQL 1.3.0 DataFrame介绍、使用
    SparkSQL之数据源
    spark集成hive遭遇mysql check失败的问题
    hive启动报错: Found class jline.Terminal, but interface was expected
  • 原文地址:https://www.cnblogs.com/sode/p/2790597.html
Copyright © 2011-2022 走看看