收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


zhang的笔记
状态: 离线
人气:5023414
访问用户量:4221
笔记经验:
总积分:261656
级别:VIP5
搜索本笔记
ta的交流分类
ta的交流主题贴(544)
ta的所有交流贴(1049)
ta的全部笔记
全部笔记(255)
未分类笔记(1)
Java Web(9)
并发实践(1)
课程问题(0)
Java(22)
架构(1)
缓存(5)
JavaEE(0)
JVM(12)
跟我学spring3(68)
Spring Sec……(43)
Spring 3.x……(25)
Spring Sec……(20)
跟开涛学Spring……(17)
深入剖析Spring……(18)
性能调优(10)
前端(2)
Tomcat源码解读(1)
spring sec……(0)
存档
2014-01(7)
2013-12(10)
2012-10(4)
2012-09(2)
2012-08(31)
2012-07(10)
2012-06(5)
2012-05(41)
2012-04(3)
2012-03(41)
2012-02(54)
2011-11(17)
2011-10(30)

2013-04-19 12:20:15
缓存之memcache-1 小张老师之收集java如何访问memcache
浏览(21381)|评论(5)   交流分类:Java|笔记分类: 缓存

 1       Memcache是什么

Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。

   

为什么会有Memcache和memcached两种名称?

其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,

    

Memcache官方网站:http://www.danga.com/memcached

 

2       Memcache工作原理

首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

 

与许多 cache 工具类似,Memcached 的原理并不复杂。它采用了C/S的模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,所使用的内存大小等几个关键参数。一旦启动,服务就一直处于可用状态。Memcached 的目前版本是通过C实现,采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式.使用libevent 作为事件通知实现。多个 Server 可以协同工作,但这些 Server 之间是没有任何通讯联系的,每个 Server 只是对自己的数据进行管理。Client 端通过指定 Server 端的 ip 地址(通过域名应该也可以)。需要缓存的对象或数据是以 key->value对的形式保存在Server端。key 的值通过 hash 进行转换,根据 hash 值把 value 传递到对应的具体的某个 Server 上。当需要获取对象数据时,也根据 key 进行。首先对 key 进行 hash,通过获得的值可以确定它被保存在了哪台 Server 上,然后再向该 Server 发出请求。Client 端只需要知道保存 hash(key) 的值在哪台服务器上就可以了。

 

        其实说到底,memcache 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。

 

3       如何使用

  • 建立Manager类


    java代码:
    package com.alisoft.sme.memcached;
    
    import java.util.Date;
    
    import com.danga.MemCached.MemCachedClient;
    import com.danga.MemCached.SockIOPool;
    
    public class MemCachedManager {
    
    	// 创建全局的唯一实例
    	protected static MemCachedClient mcc = new MemCachedClient();
    
    	protected static MemCachedManager memCachedManager = new MemCachedManager();
    
    	// 设置与缓存服务器的连接池
    	static {
    		// 服务器列表和其权重
    		String[] servers = { "127.0.0.1:11211" };
    		Integer[] weights = { 3 };
    
    		// 获取socke连接池的实例对象
    		SockIOPool pool = SockIOPool.getInstance();
    
    		// 设置服务器信息
    		pool.setServers(servers);
    		pool.setWeights(weights);
    
    		// 设置初始连接数、最小和最大连接数以及最大处理时间
    		pool.setInitConn(5);
    		pool.setMinConn(5);
    		pool.setMaxConn(250);
    		pool.setMaxIdle(1000 * 60 * 60 * 6);
    
    		// 设置主线程的睡眠时间
    		pool.setMaintSleep(30);
    
    		// 设置TCP的参数,连接超时等
    		pool.setNagle(false);
    		pool.setSocketTO(3000);
    		pool.setSocketConnectTO(0);
    
    		// 初始化连接池
    		pool.initialize();
    
    		// 压缩设置,超过指定大小(单位为K)的数据都会被压缩
    		mcc.setCompressEnable(true);
    		mcc.setCompressThreshold(64 * 1024);
    	}
    
    	/**
    	 * 保护型构造方法,不允许实例化!
    	 * 
    	 */
    	protected MemCachedManager() {
    
    	}
    
    	/**
    	 * 获取唯一实例.
    	 * 
    	 * @return
    	 */
    	public static MemCachedManager getInstance() {
    		return memCachedManager;
    	}
    
    	/**
    	 * 添加一个指定的值到缓存中.
    	 * 
    	 * @param key
    	 * @param value
    	 * @return
    	 */
    	public boolean add(String key, Object value) {
    		return mcc.add(key, value);
    	}
    
    	public boolean add(String key, Object value, Date expiry) {
    		return mcc.add(key, value, expiry);
    	}
    
    	public boolean replace(String key, Object value) {
    		return mcc.replace(key, value);
    	}
    
    	public boolean replace(String key, Object value, Date expiry) {
    		return mcc.replace(key, value, expiry);
    	}
    
    	/**
    	 * 根据指定的关键字获取对象.
    	 * 
    	 * @param key
    	 * @return
    	 */
    	public Object get(String key) {
    		return mcc.get(key);
    	}
    
    	public static void main(String[] args) {
    		MemCachedManager cache = MemCachedManager.getInstance();
    		cache.add("hello", 234);
    		System.out.print("get value : " + cache.get("hello"));
    	}
    }
    

     建立数据对象

 

java代码:
package com.alisoft.sme.memcached;

import java.io.Serializable;

public class TBean implements Serializable {
	
	private static final long serialVersionUID = 1945562032261336919L;

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

   创建测试用例

 

java代码:
package com.alisoft.sme.memcached.test;

import junit.framework.TestCase;

import org.junit.Test;

import com.alisoft.sme.memcached.MemCachedManager;
import com.alisoft.sme.memcached.TBean;

public class TestMemcached extends TestCase {

	private static MemCachedManager cache;

	@Test
	public void testCache() {
		
		TBean tb = new TBean();
		tb.setName("E网打进");
		cache.add("bean", tb);
		
		TBean tb1 = (TBean) cache.get("bean");
		System.out.println("name=" + tb1.getName());
		tb1.setName("E网打进_修改的");
		
		tb1 = (TBean) cache.get("bean");
		System.out.println("name=" + tb1.getName());
	}

	@Override
	protected void setUp() throws Exception {
		super.setUp();
		cache = MemCachedManager.getInstance();
	}

	@Override
	protected void tearDown() throws Exception {
		super.tearDown();
		cache = null;
	}

}

 测试结果


java代码:
[INFO] ++++ serializing for key: bean for class: com.alisoft.sme.memcached.TBean
[INFO] ++++ memcache cmd (result code): add bean 8 0 93 (NOT_STORED)
[INFO] ++++ data not stored in cache for key: bean
[INFO] ++++ deserializing class com.alisoft.sme.memcached.TBean
name=E网打进
[INFO] ++++ deserializing class com.alisoft.sme.memcached.TBean
name=E网打进


 转自【leeqianjun

精品视频课程推荐

透彻理解JavaBean视频教程
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。

Java数据结构和算法精讲版
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。 从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。

Ajax+JSON基础实战视频教程
数据校验、Javascript模拟多线程、下拉列表联动、操作XML、AJAX结合JSON的操作、Json-lib的使用

XML基础视频教程
创建规范的XML文档,DTD的作用,并且可以根据要求创建私用的DTD,通过JavaScript解析XML DOM

单元测试-Junit实战视频教程
JUnit4的基本使用;在maven环境下使用JUnit;用JMock来模拟测试对象要依赖的对象;用cobertura实现覆盖测试;用hundson实现持续集成;JUnit3的基本使用。

浏览(21381)|评论(5)   交流分类:Java|笔记分类: 缓存

评论(5)
5楼 zshi456  2013-04-19 引用

项目管理系统:http://kuai.xunlei.com/d/wtViAgI.2wBlSzlRcf4
自己动手写框架:http://kuai.xunlei.com/d/wtViAgLZ2gAUSTlR375
ASP.NET实战中国电信CRM:http://kuai.xunlei.com/d/wtViAgIA2gD3RDlR2e2
云计算中间件开发:http://kuai.xunlei.com/d/wtViAgKn2QCoQzlR050
云计算商城C2C项目:http://kuai.xunlei.com/d/wtViAgLj1gBJOjlRc89
ASP.NET实战小孔子OA系列:http://kuai.xunlei.com/d/wtViAgLq1QB7NjlRc94
文心老师oracle系列:http://kuai.xunlei.com/d/wtViAgL01AARMzlRe6a
王二暖老师oracle 11g视频:http://kuai.xunlei.com/d/wtViAgIcyQCMsjhR49d
ASP.NET开发通用权限系统:http://kuai.xunlei.com/d/wtViAgK.yABvsThR3d9
J2EE实战手机进销存项目:http://kuai.xunlei.com/d/wtViAgLAxwA.rjhR41e
ASP.NET实战设计模式开发:http://kuai.xunlei.com/d/wtViAgJixwA1rThRc81
ASP.NET石曼迪his项目实战视频:http://kuai.xunlei.com/d/wtViAgL5xgC4qzhR135
厉风行老师java版本crm:http://kuai.xunlei.com/d/wtViAgKLwwAioThR1a0
ASP.NET实战科技公司网站开发:http://kuai.xunlei.com/d/wtViAgKNwgBJnjhRb4a
华仔老师iphone视频教程:http://kuai.xunlei.com/d/wtViAgI-wACvmDhRa3e
ASP.NET实战国讯OA视频教程:http://kuai.xunlei.com/d/wtViAgJWuAAofzhR95b
ASP.NET实战工作流审批系统:http://kuai.xunlei.com/d/wtViAgIpuACUfjhR218
java实战高性能基金服务器开发:http://kuai.xunlei.com/d/wtViAgKttgCaeThR11b
凤舞烟老师flex4系列实战视频:http://kuai.xunlei.com/d/wtViAgJ3tgDAeDhR51b
凤舞烟老师jquery实战开发视频:http://kuai.xunlei.com/d/wtViAgKNtABWcDhRd6c
凤舞烟老师webservice实战视频:http://kuai.xunlei.com/d/wtViAgI.tADZbjhR724
凤舞烟老师extjs实战视频:http://kuai.xunlei.com/d/wtViAgL8swCsbThR3be
ASP.NET对日外包项目视频:http://kuai.xunlei.com/d/wtViAgLzswB3bThR96e
VS2008开发vc++程序视频:http://kuai.xunlei.com/d/wtViAgJJswB5azhR7af
Android游戏开发系列:http://kuai.xunlei.com/d/wtViAgIaswC5ajhR2e2
存储过程在ASP.NET开发中的应用:http://kuai.xunlei.com/d/wtViAgL5sgArajhR9b8
J2EE版本贝斯OA系统实战开发:http://kuai.xunlei.com/d/wtViAgLWsgCzaThRcef
JSP+jdbc实战报价管理系统视频:http://kuai.xunlei.com/d/wtViAgK5sQDxZThR1af
WPF视频教程:http://kuai.xunlei.com/d/wtViAgJYsQBIZDhRb6c
WPF流程设计器视频教程:http://kuai.xunlei.com/d/wtViAgIXsQA.YzhRd7f
C#实战winform版本的OA开发视频:http://kuai.xunlei.com/d/wtViAgLksACCYjhR13e
window服务器与网络编程-vc++视频教程:http://kuai.xunlei.com/d/wtViAgLGsAAHYjhR8e2
windows phone预科班视频教程:http://kuai.xunlei.com/d/wtViAgKDsADGYDhR67b
windows phone项目实战视频教程:http://kuai.xunlei.com/d/wtViAgJYsAAQYDhRe9a
windows phone系列视频教程:http://kuai.xunlei.com/d/wtViAgIVsAAhXzhR6c2
win8系列视频教程:http://kuai.xunlei.com/d/wtViAgIurwCcXDhR050
wcf高级实战视频教程:http://kuai.xunlei.com/d/wtViAgLLrgBAWzhR03a
WCF服务免费课程(共6讲)视频教程:http://kuai.xunlei.com/d/wtViAgI5rgAYWThR4f8
J2EE版本实战博客系统开发视频教程:http://kuai.xunlei.com/d/wtViAgIUrQC0VDhR146
sharepoint2010实战视频教程:http://kuai.xunlei.com/d/wtViAgKCrADQUjhR828
nosql系列之redis实战视频:http://kuai.xunlei.com/d/wtViAgIlqwBxTjhR09f
ruby on rails框架视频教程:http://kuai.xunlei.com/d/wtViAgLoqgCjTThR7c2
JAVA语言基础与OOP入门:http://kuai.xunlei.com/d/wtViAgIApgDYPDhRa02
ASP.NET实战pptv项目开发:http://kuai.xunlei.com/d/wtViAgJ.pQDyOjhR98c
oracle之PL/sql视频教程:http://kuai.xunlei.com/d/wtViAgIepQC9OThR27b
PHP版本的CRM开发视频教程:http://kuai.xunlei.com/d/wtViAgJkpADrNzhReeb
oracle入门之sql开发视频:http://kuai.xunlei.com/d/wtViAgLtowCDNjhR6cb
OpenScales的地图网站开发视频:http://kuai.xunlei.com/d/wtViAgJ-ogBCMThRdaa
nosql系列之Mongodb视频教程:http://kuai.xunlei.com/d/wtViAgLooQCCLzhR2e8
lucene基础视频教程:http://kuai.xunlei.com/d/wtViAgKkoQBHLjhR706
jquery实战图书管理系统:http://kuai.xunlei.com/d/wtViAgJFoQDRLDhR7b5
javascript视频教程下载:http://kuai.xunlei.com/d/wtViAgJBoQDELDhR39b
javafx视频教程下载:http://kuai.xunlei.com/d/wtViAgI1oQB-LDhR5e2
html5项目实战视频教程:http://kuai.xunlei.com/d/wtViAgIjoQAyLDhRbf5
html5从入门到精通视频教程:http://kuai.xunlei.com/d/wtViAgK-oAB1KjhRe4e
ASP.NET实战hr项目实战视频教程:http://kuai.xunlei.com/d/wtViAgL0nwCgJzhR87f
hadoop高级视频教程:http://kuai.xunlei.com/d/wtViAgL7ngAdJThR2e1
flex系统实战视频教程:http://kuai.xunlei.com/d/wtViAgKXngC1IzhR672
flex实战订餐系统开发视频教程:http://kuai.xunlei.com/d/wtViAgISngAcIjhR8b7
flex4.0开发B2C项目实战视频教程:http://kuai.xunlei.com/d/wtViAgJVmwBXGDhRb74
extjs基础视频教程:http://kuai.xunlei.com/d/wtViAgLIgQB2YjdRe5f
extjs4.1.1视频教程:http://kuai.xunlei.com/d/wtViAgJLgQDDYDdRd50
ASP.NET实战erp系统视频教程:http://kuai.xunlei.com/d/wtViAgI8gQCMYDdR6e2
ECSHOP二次开发视频教程:http://kuai.xunlei.com/d/wtViAgICgQDdXzdRb37
VC++游戏开发之Directcomputer视频教程:http://kuai.xunlei.com/d/wtViAgKegACXXjdR04a
cs-老师html5移动开发:http://kuai.xunlei.com/d/wtViAgJegAC9XTdRe36
ASP.NET实战CMS项目开发:http://kuai.xunlei.com/d/wtViAgJofwC7WjdRbe9
C++系列从零起步视频教程:http://kuai.xunlei.com/d/wtViAgIFfwBOWTdRc0d
C#数据结构实战视频教程:http://kuai.xunlei.com/d/wtViAgJifgCIVzdRa7a
c#基础视频教程:http://kuai.xunlei.com/d/wtViAgKafQAdVTdRfc7
asp.net基础系列视频教程:http://kuai.xunlei.com/d/wtViAgJZegD5TDdRbe5
asp.net的博客项目:http://kuai.xunlei.com/d/wtViAgJWeQBISjdR00d
asp.net-b2c实战开发视频教程:http://kuai.xunlei.com/d/wtViAgIdeADERjdRc38
android实用技术视频教程:http://kuai.xunlei.com/d/wtViAgJpdgDqQTdR7ac
23种设计模式视频教程:http://kuai.xunlei.com/d/wtViAgIsdgD9QDdRc8d
iphone游戏开发视频教程:http://kuai.xunlei.com/d/wtViAgLZdQDlPzdR195
im即时通讯_网络通讯部分视频教程:http://kuai.xunlei.com/d/wtViAgIjcgAWNTdR052

4楼 tomdog  2012-11-09 引用

 

zhang写

 

shxtdq写

想问一下http://www.shxtdq..com  该网站是shopEX485版本的。目前出现页面打开后图片无法显示的问题,需要每隔10分钟就要在后台清空缓存,清空后就恢复正常了。这样很麻烦,问一下可以用MEMCACHED这个缓存机制能解决问题吗?恳求帮忙!谢谢!

 

缓存思想都是一样的,不能解决你这个问题,可以考虑时间差小一些  

 

目前出现页面打开后图片无法显示的问题:这是怎么缓存的? 为什么图片无法显示?

 如果memcache服务器当掉,web工程就不能向memcache缓存数据,这种情况发生的话该怎么办?

3楼 zhang  2012-11-09 引用

 

shxtdq写

想问一下http://www.shxtdq..com  该网站是shopEX485版本的。目前出现页面打开后图片无法显示的问题,需要每隔10分钟就要在后台清空缓存,清空后就恢复正常了。这样很麻烦,问一下可以用MEMCACHED这个缓存机制能解决问题吗?恳求帮忙!谢谢!

 

缓存思想都是一样的,不能解决你这个问题,可以考虑时间差小一些  

 

目前出现页面打开后图片无法显示的问题:这是怎么缓存的? 为什么图片无法显示?

2楼 shxtdq  2012-11-09 引用

想问一下http://www.shxtdq..com  该网站是shopEX485版本的。目前出现页面打开后图片无法显示的问题,需要每隔10分钟就要在后台清空缓存,清空后就恢复正常了。这样很麻烦,问一下可以用MEMCACHED这个缓存机制能解决问题吗?恳求帮忙!谢谢!

1楼 grzrt  2011-10-29 引用
不错
请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网