一、 概念

Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。

二、 适用场合

1. 分布式应用。由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统。

2. 数据库前段缓存。数据库常常是网站系统的瓶颈。数据库的大并发量访问,常常造成网站内存溢出。当然我们也可以使用Hibernate的缓存机制。但memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的拆分。

3. 服务器间数据共享。举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进行集群,那这个时候用户登录后,登录信息如何从登录系统服务器同步到查询系统服务器呢?这时候,我们便可以使用memcached,登录系统将登录信息缓存起来,查询系统便可以获得登录信息,就像获取本地信息一样。

三、 不适用场合

那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源

四、 安装

这里介绍windows环境的安装。

1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached

2. 在cmd下输入 'c:\memcached\memcached.exe -d install' 安装

3. 再输入: 'c:\memcached\memcached.exe -d start' 启动。

以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。

五、 客户端

Memcached本身是使用C开发的,客户端可以是php、C#、或者java。我是做java的,所以这里只介绍基于java的客户端。

我在网上看到基于java的客户端有两个

1. java_memcached-release_2.6.3

1) 简介

这是比较通用的Memcached客户端框架。具体原创不详。

2) 依赖的jar

A. commons-pool-1.5.6.jar

B. java_memcached-release_2.6.3.jar

C. slf4j-api-1.6.1.jar

D. slf4j-simple-1.6.1.jar

2. alisoft-xplatform-asf-cache-2.5.1

1) 简介

这个东东是阿里软件的架构师岑文初进行封装的。里面的注释都是中文的,比较好。

2) 依赖的jar

A. alisoft-xplatform-asf-cache-2.5.1.jar

B. commons-logging-1.0.4.jar

C. hessian-3.0.1.jar

D. log4j-1.2.9.jar

E. stax-api-1.0.1.jar

F. wstx-asl-2.0.2.jar

六、范例

1.基于java_memcached-release_2.6.3

  1. package com.hl.memcached.cache;
  2. import java.util.Date;
  3. import com.danga.MemCached.MemCachedClient;
  4. import com.danga.MemCached.SockIOPool;
  5. public class MyCache {
  6. public static void main(String[] args) {
  7. MemCachedClient client=new MemCachedClient();
  8. String [] addr ={"127.0.0.1:11211"};
  9. Integer [] weights = {3};
  10. SockIOPool pool = SockIOPool.getInstance();
  11. pool.setServers(addr);
  12. pool.setWeights(weights);
  13. pool.setInitConn(5);
  14. pool.setMinConn(5);
  15. pool.setMaxConn(200);
  16. pool.setMaxIdle(1000*30*30);
  17. pool.setMaintSleep(30);
  18. pool.setNagle(false);
  19. pool.setSocketTO(30);
  20. pool.setSocketConnectTO(0);
  21. pool.initialize();
  22. //      String [] s  =pool.getServers();
  23. client.setCompressEnable(true);
  24. client.setCompressThreshold(1000*1024);
  25. //      将数据放入缓存
  26. client.set("test2","test2");
  27. //      将数据放入缓存,并设置失效时间
  28. Date date=new Date(2000000);
  29. client.set("test1","test1", date);
  30. //      删除缓存数据
  31. //      client.delete("test1");
  32. //      获取缓存数据
  33. String str =(String)client.get("test1");
  34. System.out.println(str);
  35. }
  36. }

2.   基于alisoft-xplatform-asf-cache-2.5.1

1)  配置memcached.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <memcached>
  3. <!-- name 属性是程序中使用Cache的唯一标识;socketpool 属性将会关联到后面的socketpool配置; -->
  4. <client name="mclient_0" compressEnable="true" defaultEncoding="UTF-8"
  5. socketpool="pool_0">
  6. <!-- 可选,用来处理出错情况 -->
  7. <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler
  8. </errorHandler>
  9. </client>
  10. <!--
  11. name 属性和client 配置中的socketpool 属性相关联。
  12. maintSleep属性是后台线程管理SocketIO池的检查间隔时间,如果设置为0,则表明不需要后台线程维护SocketIO线程池,默认需要管理。
  13. socketTO 属性是Socket操作超时配置,单位ms。 aliveCheck
  14. 属性表示在使用Socket以前是否先检查Socket状态。
  15. -->
  16. <socketpool name="pool_0" maintSleep="5000" socketTO="3000"
  17. failover="true" aliveCheck="true" initConn="5" minConn="5" maxConn="250"
  18. nagle="false">
  19. <!-- 设置memcache服务端实例地址.多个地址用","隔开 -->
  20. <servers>127.0.0.1:11211</servers>
  21. <!--
  22. 可选配置。表明了上面设置的服务器实例的Load权重. 例如 <weights>3,7</weights> 表示30% load 在
  23. 10.2.224.36:33001, 70% load 在 10.2.224.46:33001
  24. <weights>3,7</weights>
  25. -->
  26. </socketpool>
  27. </memcached>

2) 测试类

  1. package com.hl.memcached.client.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.alisoft.xplatform.asf.cache.ICacheManager;
  5. import com.alisoft.xplatform.asf.cache.IMemcachedCache;
  6. import com.alisoft.xplatform.asf.cache.memcached.CacheUtil;
  7. import com.alisoft.xplatform.asf.cache.memcached.MemcachedCacheManager;
  8. import com.hl.memcached.cache.client.TestBean;
  9. public class ClientTest {
  10. @SuppressWarnings("unchecked")
  11. public static void main(String[] args) {
  12. ICacheManager<IMemcachedCache> manager;
  13. manager = CacheUtil.getCacheManager(IMemcachedCache.class,
  14. MemcachedCacheManager.class.getName());
  15. manager.setConfigFile("memcached.xml");
  16. manager.start();
  17. try {
  18. IMemcachedCache cache = manager.getCache("mclient_0");
  19. cache.put("key", "value");
  20. System.out.println(cache.get("key"));
  21. } finally {
  22. manager.stop();
  23. }
  24. }
  25. }

七、使用memcached缓存java bean自定义对象

Memcached可以缓存String,也可以缓存自定义java bean。但必须是可序列化的java bean(implements Serializable即可)

1.         基于java_memcached-release_2.6.3

测试用java bean

  1. package com.hl.memcached.cache.client;
  2. import java.io.Serializable;
  3. public class TestBean implements Serializable{
  4. private static final long serialVersionUID = 5344571864700659321L;
  5. private String name;
  6. private Integer age;
  7. //get、set方法略
  8. }

MyCache.java 代码

  1. package com.hl.memcached.cache;
  2. import java.util.Date;
  3. import com.danga.MemCached.MemCachedClient;
  4. import com.danga.MemCached.SockIOPool;
  5. public class MyCache {
  6. public static void main(String[] args) {
  7. MemCachedClient client=new MemCachedClient();
  8. String [] addr ={"127.0.0.1:11211"};
  9. Integer [] weights = {3};
  10. SockIOPool pool = SockIOPool.getInstance();
  11. pool.setServers(addr);
  12. pool.setWeights(weights);
  13. pool.setInitConn(5);
  14. pool.setMinConn(5);
  15. pool.setMaxConn(200);
  16. pool.setMaxIdle(1000*30*30);
  17. pool.setMaintSleep(30);
  18. pool.setNagle(false);
  19. pool.setSocketTO(30);
  20. pool.setSocketConnectTO(0);
  21. pool.initialize();
  22. //      String [] s  =pool.getServers();
  23. client.setCompressEnable(true);
  24. client.setCompressThreshold(1000*1024);
  25. //      将数据放入缓存
  26. TestBean bean=new TestBean();
  27. bean.setName("name1");
  28. bean.setAge(25);
  29. client.add("bean1", bean);
  30. //      获取缓存数据
  31. TestBean beanClient=(TestBean)client.get("bean1");
  32. System.out.println(beanClient.getName());
  33. }
  34. }

2.         基于alisoft-xplatform-asf-cache-2.5.1

  1. package com.hl.memcached.client.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.alisoft.xplatform.asf.cache.ICacheManager;
  5. import com.alisoft.xplatform.asf.cache.IMemcachedCache;
  6. import com.alisoft.xplatform.asf.cache.memcached.CacheUtil;
  7. import com.alisoft.xplatform.asf.cache.memcached.MemcachedCacheManager;
  8. import com.hl.memcached.cache.client.TestBean;
  9. public class ClientTest {
  10. @SuppressWarnings("unchecked")
  11. public static void main(String[] args) {
  12. ICacheManager<IMemcachedCache> manager;
  13. manager = CacheUtil.getCacheManager(IMemcachedCache.class,
  14. MemcachedCacheManager.class.getName());
  15. manager.setConfigFile("memcached.xml");
  16. manager.start();
  17. try {
  18. IMemcachedCache cache = manager.getCache("mclient_0");
  19. TestBean bean=new TestBean();
  20. bean.setName("name1");
  21. bean.setAge(25);
  22. cache.put("bean", bean);
  23. TestBean beanClient=(TestBean)cache.get("bean");
  24. System.out.println(beanClient.getName());
  25. List<TestBean> list=new ArrayList<TestBean>();
  26. list.add(bean);
  27. cache.put("beanList", list);
  28. List<TestBean> listClient=(List<TestBean>)cache.get("beanList");
  29. if(listClient.size()>0){
  30. TestBean bean4List=listClient.get(0);
  31. System.out.println(bean4List.getName());
  32. }
  33. } finally {
  34. manager.stop();
  35. }
  36. }
  37. }

八、参考资料:

http://blog.developers.api.sina.com.cn/?p=124

http://www.infoq.com/cn/articles/memcached-java

九、源代码及资料见附件

初见memcached的更多相关文章

  1. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

  2. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  3. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

  4. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  5. 企业做数据缓存是使用Memcached还是选Redis?

    企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...

  6. NoSql1 在Linux(CentOS)上安装memcached及使用

    前言:       今天是初五,生活基本要从过年的节奏中回归到正常的生活了,所以想想也该想想与工作有关的事情了.我之前在工作中会经常使用memcached和redis,但是自己一直没有时间系统的好好看 ...

  7. Memcached简介

    在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...

  8. Linux 服务器 安装 memcached

    linux centos 一.memcached的安装 1.下载 memcached-1.4.33.tar.gz.libevent-2.0.22-stable.tar.gz 安装 memcached ...

  9. Memcached和Redis比较

    一.存储 Memcached基本只支持简单的key-value存储方式.Redis除key-value之外,还支持list,set,sorted set,hash等数据结构:Redis支持数据的备份, ...

  10. 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展

    上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...

随机推荐

  1. 出海浪头之上,共探CDN进化新支力

    CDN技术自问世以来已超过20个年头,在云计算与AI深度融合的大趋势下,各行业实际业务需求已发生巨变,下一代CDN技术又将走向何方?8月16日,"抓住泛娱热趋,打通增长脉络--大浪淘沙之后的 ...

  2. MyBatis 从入门到放弃 ( MyBatis基础总结 )

    目录 MyBatis历史 Mybatis特性 MyBatis下载 和其它持久化层技术对比 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 创建MyBatis的映射 ...

  3. RuleLinKClient - 再也不担心表达引擎宕机了

    原来有这么多时间 六月的那么一天,天气比以往时候都更凉爽,媳妇边收拾桌子,边漫不经心的对我说:你最近好像都没怎么阅读了. 正刷着新闻我,如同被一记响亮的晴空霹雳击中一般,不知所措.是了,最近几月诸事凑 ...

  4. DOM & BOM – 大杂烩

    Document.scrollingElement 参考: why to use 'html, body' for scrollTop instead of just 'html' MDN 使用doc ...

  5. 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境转换为管理域。

    VMware Cloud Foundation 5.2 发布并引入了一个新的功能,借助 VCF Import Tool 工具可以将现有 vSphere 环境直接转换(Convert)为管理工作负载域或 ...

  6. python安装sklearn

    安装sklearn这个包,首先要安装三个依赖包,如图划红线的部分. 要找这三个包,我们都可以登录:https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy 这 ...

  7. C#的 ArrayList集合 和 List 集合

    // 集合 & 字典的初识 // 集合的使用 // 集合与数组比较类似,都用于存放一组值 // 数组的优劣势分析 // 1. 优势:数组在内存中是连续存储的,所以他的索引速度非常的快,而且赋值 ...

  8. token有⼀定的失效性,过期了该怎么做?

    token 失效分为主动失效和被动失效 主动失效 就是自己设置函数检查token是否失效了, 主要步骤 :1 1.在登录的时候记录存储token的时间, 2. 在request文件,设置一个函数,用来 ...

  9. 什么是SCI, SCIE, JCR和影响因子(IF)?

    SCI(Scientific Citation Index):是美国科学信息研究所(ISI)编辑出版的引文索引类刊物,创刊于1964年.分印刷版.光盘版和联机板等载体.印刷版.光盘版从全球数万种期刊中 ...

  10. 函数(C语言)

    目录 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.1 实参 4.2 形参 4. ...