引用: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/

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

转载于:https://www.cnblogs.com/sode/archive/2012/11/27/2790597.html

Memcache的使用相关推荐

  1. wdcp php5.3 pdo_mysql,WDCP常用组件(memcache、mysqli、PDO_MYSQL、mysql innodb、libmcrypt、php zip)的安装方法...

    一般来说WDCP安装之后就可以正常使用了,不过对于一些朋友来说还无法满足,现在收集了有关WDCP常用组件,比如memcache.mysqli.PDO_MYSQL.mysql innodb.libmcr ...

  2. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  3. Memcache内存分配策略

    转自:http://tank.blogs.tkiicpp.com/2010/12/14/memcache%e5%86%85%e5%ad%98%e5%88%86%e9%85%8d%e7%ad%96%e7 ...

  4. memcache和memcached安装

    首先要明确  memcache不是memcached 第一步安装libevent #wget  https://github.com/downloads/libevent/libevent/libev ...

  5. 分享memcache和memcached安装过程

    Memcache是什么? Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速动态web应用程序,减轻数据库负载. 它可以应对任意多个连接,使用非阻塞的网络IO.由于它的工 ...

  6. Linux下Memcache服务器端的安装

    Linux下Memcache服务器端的安装 服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 . 下载:http://www.danga.com/memca ...

  7. Linux下的Memcache安装(含libevent的安装)

    Linux下Memcache服务器端的安装 服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 . 下载:http://www.danga.com/memca ...

  8. 在apache中使用 memcache 来作 session 存储

    session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211" 使用多个 memcached ...

  9. memcache安装

    转载自 http://zhaochen.blog.51cto.com/2029597/390037 一,memcache简单介绍: memcached是高性能的分布式内存缓存服务器,为了提高性能,me ...

  10. 用memcache.php监测memcache的状况

    最新的memcache pecl中,新增了一个memcache.php,这个php文件可以用来方便的查看memcache的状况,界面上与apc自带的apc.php风格一致. 如图: 应该算是最方便的监 ...

最新文章

  1. 使用reflector对.NET反编译
  2. Matlab编程与数据类型 -- 出错处理语句try/catch/end
  3. 几句代码 修改 Kali 2020.3 - root 用户的密码
  4. 联想重启乐檬?5G时代手机双品牌战略带来变局
  5. 12/12 day06
  6. 时间源服务器|授时仪|GPS时钟同步系统
  7. 【深度学习笔记】python图像特征提取
  8. python中的for循环
  9. 从零开始入门 K8s | 手把手带你理解 etcd
  10. c++Insertion Sort插入排序的实现算法(附完整源码)
  11. 数据库-优化-案例-max()函数优化
  12. jackson 中JsonFormat date类型字段的使用
  13. eclipse自动排版JSP问题
  14. PAL/NTSC/SECAM,这是全球现行的三种模拟技术彩色电视的制式
  15. java中process方法用处_Java中ProcessBuilder应用实例
  16. centos下安装opencv
  17. 我愿意为你在城里的月光下温暖冷冷的爱情
  18. AspNetPager控件+repeater+Ajax+存储过程实现高效分页,还有漂亮控件样式
  19. 用python绘制圆中圆
  20. 邮箱投递简历,如何正确书写正文和主题?

热门文章

  1. Lua脚本语言应用场景
  2. JVM 调优实战--一个案例理解常用工具(命令)
  3. Java Stack栈类详解
  4. Java中int和short的取值范围_我的处理器上C中的int,short和其他数据类型的范围?...
  5. java 字段验证_Selenium-Gherkin-Java:验证必填字段上的文本
  6. 限速会自动恢复吗_骨折会自己好吗?骨折后怎样做恢复快?
  7. 最优化——对偶问题的性质(弱对偶性,强对偶性),对偶问题形式的书写(对偶规则)
  8. 云服务器怎么打开_香港云服务器怎么样?
  9. arduino电源接口直径多大_求助:Arduino UNO(如下图)有三种供电方式:USB供电,5v(供应芯片,下面一排接口中“...
  10. C/Cpp / C++ 构造函数和析构函数可以是虚函数吗