收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 

交流首页 » Java »缓存之memcache-1 小张老师之收集java如何访问memcache  提现最快的斗地主游戏
发表人 内容
zhang
[头像]

交流经验:
总积分:261656
级别:VIP5
注册时间: 2011-08-09
文章: 1163
离线

 1       Memcache是什么

本文地址:http://www.panxinet.com/forum/posts/list/311.html
文章摘要:缓存之memcache,旗子弘毅宽厚深入膏肓,呵壁问天克纳普黑咕隆咚。

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

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

   

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

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

    

Memcache官方网站:http://www.panxinet.com/610/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

这篇文章被编辑了 1 次. 最近一次更新是在 2011-10-29 10:15:54


推广链接
精品视频课程推荐

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

研磨设计模式——跟着cc学设计系列视频教程
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......

深入浅出学Shrio视频教程
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术 技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容

log4j&slf4j基础实战视频教程
学习在java项目中使用log4j、jdk自带的日志框架和slf4j

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

grzrt
[头像]

交流经验:
总积分:2049
级别:VIP1
注册时间: 2011-10-24
文章: 13
离线

不错


个性签名:学习需要坚持。。。
shxtdq
[头像]

交流经验:
总积分:119
级别:普通会员
注册时间: 2012-11-09
文章: 4
离线

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



个性签名:上海象泰电器专业销售进口接触器,继电器,断路器,开关,电流表,电压表,互感器,执行器,尼龙扎带,接线端子,警示灯,轴流风机等。
zhang
[头像]

交流经验:
总积分:261656
级别:VIP5
注册时间: 2011-08-09
文章: 1163
离线

 

shxtdq写

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

 

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

 

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

tomdog
[头像]

交流经验:
总积分:44866
级别:VIP5
注册时间: 2012-08-17
文章: 217
离线

 

zhang写

 

shxtdq写

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

 

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

 

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

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

zshi456
[头像]

交流经验:
总积分:128
级别:普通会员
注册时间: 2013-04-19
文章: 15
离线

项目管理系统:http://www.panxinet.com/579/d/wtViAgI.2wBlSzlRcf4
自己动手写框架:http://www.panxinet.com/396/d/wtViAgLZ2gAUSTlR375
ASP.NET实战中国电信CRM:http://www.panxinet.com/811/d/wtViAgIA2gD3RDlR2e2
云计算中间件开发:http://www.panxinet.com/069/d/wtViAgKn2QCoQzlR050
云计算商城C2C项目:http://www.panxinet.com/264/d/wtViAgLj1gBJOjlRc89
ASP.NET实战小孔子OA系列:http://www.panxinet.com/887/d/wtViAgLq1QB7NjlRc94
文心老师oracle系列:http://www.panxinet.com/533/d/wtViAgL01AARMzlRe6a
王二暖老师oracle 11g视频:http://www.panxinet.com/297/d/wtViAgIcyQCMsjhR49d
ASP.NET开发通用权限系统:http://www.panxinet.com/891/d/wtViAgK.yABvsThR3d9
J2EE实战手机进销存项目:http://www.panxinet.com/522/d/wtViAgLAxwA.rjhR41e
ASP.NET实战设计模式开发:http://www.panxinet.com/041/d/wtViAgJixwA1rThRc81
ASP.NET石曼迪his项目实战视频:http://www.panxinet.com/575/d/wtViAgL5xgC4qzhR135
厉风行老师java版本crm:http://www.panxinet.com/455/d/wtViAgKLwwAioThR1a0
ASP.NET实战科技公司网站开发:http://www.panxinet.com/581/d/wtViAgKNwgBJnjhRb4a
华仔老师iphone视频教程:http://www.panxinet.com/131/d/wtViAgI-wACvmDhRa3e
ASP.NET实战国讯OA视频教程:http://www.panxinet.com/907/d/wtViAgJWuAAofzhR95b
ASP.NET实战工作流审批系统:http://www.panxinet.com/697/d/wtViAgIpuACUfjhR218
java实战高性能基金服务器开发:http://www.panxinet.com/530/d/wtViAgKttgCaeThR11b
凤舞烟老师flex4系列实战视频:http://www.panxinet.com/551/d/wtViAgJ3tgDAeDhR51b
凤舞烟老师jquery实战开发视频:http://www.panxinet.com/971/d/wtViAgKNtABWcDhRd6c
凤舞烟老师webservice实战视频:http://www.panxinet.com/420/d/wtViAgI.tADZbjhR724
凤舞烟老师extjs实战视频:http://www.panxinet.com/785/d/wtViAgL8swCsbThR3be
ASP.NET对日外包项目视频:http://www.panxinet.com/246/d/wtViAgLzswB3bThR96e
VS2008开发vc++程序视频:http://www.panxinet.com/377/d/wtViAgJJswB5azhR7af
Android游戏开发系列:http://www.panxinet.com/202/d/wtViAgIaswC5ajhR2e2
存储过程在ASP.NET开发中的应用:http://www.panxinet.com/524/d/wtViAgL5sgArajhR9b8
J2EE版本贝斯OA系统实战开发:http://www.panxinet.com/895/d/wtViAgLWsgCzaThRcef
JSP+jdbc实战报价管理系统视频:http://www.panxinet.com/890/d/wtViAgK5sQDxZThR1af
WPF视频教程:http://www.panxinet.com/659/d/wtViAgJYsQBIZDhRb6c
WPF流程设计器视频教程:http://www.panxinet.com/100/d/wtViAgIXsQA.YzhRd7f
C#实战winform版本的OA开发视频:http://www.panxinet.com/205/d/wtViAgLksACCYjhR13e
window服务器与网络编程-vc++视频教程:http://www.panxinet.com/893/d/wtViAgLGsAAHYjhR8e2
windows phone预科班视频教程:http://www.panxinet.com/547/d/wtViAgKDsADGYDhR67b
windows phone项目实战视频教程:http://www.panxinet.com/044/d/wtViAgJYsAAQYDhRe9a
windows phone系列视频教程:http://www.panxinet.com/271/d/wtViAgIVsAAhXzhR6c2
win8系列视频教程:http://www.panxinet.com/832/d/wtViAgIurwCcXDhR050
wcf高级实战视频教程:http://www.panxinet.com/315/d/wtViAgLLrgBAWzhR03a
WCF服务免费课程(共6讲)视频教程:http://www.panxinet.com/248/d/wtViAgI5rgAYWThR4f8
J2EE版本实战博客系统开发视频教程:http://www.panxinet.com/041/d/wtViAgIUrQC0VDhR146
sharepoint2010实战视频教程:http://www.panxinet.com/057/d/wtViAgKCrADQUjhR828
nosql系列之redis实战视频:http://www.panxinet.com/361/d/wtViAgIlqwBxTjhR09f
ruby on rails框架视频教程:http://www.panxinet.com/699/d/wtViAgLoqgCjTThR7c2
JAVA语言基础与OOP入门:http://www.panxinet.com/403/d/wtViAgIApgDYPDhRa02
ASP.NET实战pptv项目开发:http://www.panxinet.com/148/d/wtViAgJ.pQDyOjhR98c
oracle之PL/sql视频教程:http://www.panxinet.com/934/d/wtViAgIepQC9OThR27b
PHP版本的CRM开发视频教程:http://www.panxinet.com/194/d/wtViAgJkpADrNzhReeb
oracle入门之sql开发视频:http://www.panxinet.com/580/d/wtViAgLtowCDNjhR6cb
OpenScales的地图网站开发视频:http://www.panxinet.com/695/d/wtViAgJ-ogBCMThRdaa
nosql系列之Mongodb视频教程:http://www.panxinet.com/866/d/wtViAgLooQCCLzhR2e8
lucene基础视频教程:http://www.panxinet.com/806/d/wtViAgKkoQBHLjhR706
jquery实战图书管理系统:http://www.panxinet.com/097/d/wtViAgJFoQDRLDhR7b5
javascript视频教程下载:http://www.panxinet.com/480/d/wtViAgJBoQDELDhR39b
javafx视频教程下载:http://www.panxinet.com/771/d/wtViAgI1oQB-LDhR5e2
html5项目实战视频教程:http://www.panxinet.com/572/d/wtViAgIjoQAyLDhRbf5
html5从入门到精通视频教程:http://www.panxinet.com/773/d/wtViAgK-oAB1KjhRe4e
ASP.NET实战hr项目实战视频教程:http://www.panxinet.com/196/d/wtViAgL0nwCgJzhR87f
hadoop高级视频教程:http://www.panxinet.com/616/d/wtViAgL7ngAdJThR2e1
flex系统实战视频教程:http://www.panxinet.com/998/d/wtViAgKXngC1IzhR672
flex实战订餐系统开发视频教程:http://www.panxinet.com/357/d/wtViAgISngAcIjhR8b7
flex4.0开发B2C项目实战视频教程:http://www.panxinet.com/765/d/wtViAgJVmwBXGDhRb74
extjs基础视频教程:http://www.panxinet.com/836/d/wtViAgLIgQB2YjdRe5f
extjs4.1.1视频教程:http://www.panxinet.com/913/d/wtViAgJLgQDDYDdRd50
ASP.NET实战erp系统视频教程:http://www.panxinet.com/605/d/wtViAgI8gQCMYDdR6e2
ECSHOP二次开发视频教程:http://www.panxinet.com/341/d/wtViAgICgQDdXzdRb37
VC++游戏开发之Directcomputer视频教程:http://www.panxinet.com/705/d/wtViAgKegACXXjdR04a
cs-老师html5移动开发:http://www.panxinet.com/608/d/wtViAgJegAC9XTdRe36
ASP.NET实战CMS项目开发:http://www.panxinet.com/388/d/wtViAgJofwC7WjdRbe9
C++系列从零起步视频教程:http://www.panxinet.com/973/d/wtViAgIFfwBOWTdRc0d
C#数据结构实战视频教程:http://www.panxinet.com/277/d/wtViAgJifgCIVzdRa7a
c#基础视频教程:http://www.panxinet.com/704/d/wtViAgKafQAdVTdRfc7
asp.net基础系列视频教程:http://www.panxinet.com/084/d/wtViAgJZegD5TDdRbe5
asp.net的博客项目:http://www.panxinet.com/372/d/wtViAgJWeQBISjdR00d
asp.net-b2c实战开发视频教程:http://www.panxinet.com/180/d/wtViAgIdeADERjdRc38
android实用技术视频教程:http://www.panxinet.com/485/d/wtViAgJpdgDqQTdR7ac
23种设计模式视频教程:http://www.panxinet.com/299/d/wtViAgIsdgD9QDdRc8d
iphone游戏开发视频教程:http://www.panxinet.com/081/d/wtViAgLZdQDlPzdR195
im即时通讯_网络通讯部分视频教程:http://www.panxinet.com/828/d/wtViAgIjcgAWNTdR052

 
交流首页 » Java
前往:   

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

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