最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具memcached(当然该工具并不仅仅局限于数据库的缓存)。先简单的介绍下什么是memcached。
Memcached
是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached由Danga
Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数
据库负载大幅度降低,更好的分配资源,更快速访问。
上网baidu了很多东西,几乎都差不多,而且基于java的说的很少,所有只有在研究了各个其他语言类的应用后再来尝试在java上进行简单的操作应
用。先从memcached上进行说明,memcached的最新版是采用c语言进行开发和设计的,据说旧版的是采用perl语言开发的,而且它是一个应
用软件来的,是作为缓存服务器的服务器端运行在服务器上的,需要使用特定的语言编写客户端与其进行通信来进行数据的缓存和获取。通常我们是把
memcached安装运行在web服务器上,然后通过对需要的数据进行缓存,据我目前所知,所有数据的缓存设置和存取操作,以及数据的更新后替换操作全
部需要程序来进行,而不是自动进行的(自动不知道能不能成功,呵呵)。下面从一个实际的例子来应用memcached。
首先到http://danga.com/memcached/
下
载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和
java_memcached-release_1.6.zip,分别解压后即可!首先是安装运行memcached服务器,我们将memcached-
1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:
c:>memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start
第一行是安装memcached成为服务,这样才能正常运行,否则运行失败!第一行是启动memcached的,作为测试我们就简单的只分配32M内存
了,然后监听本机端口和以守护进行运行。执行完毕后,我们就可以在任务管理器中见到memcached.exe这个进程了。好了,我们的服务器已经正常运
行了, 下面我们就来写java的客户端连接程序。
我们将java_memcached-release_1.6.zip解压后的目录中的java_memcached-release_1.6.jar文件复制到java项目的lib目录下,然后我们来编写代码,比如我提供的一个应用类如下:
package
utils.cache;
import
java.util.Date;
import
com.danga.MemCached.MemCachedClient;
import
com.danga.MemCached.SockIOPool;
/**
* 使用memcached的缓存实用类.
*
*
@author
铁木箱子
*
*/
public
class
MemCached
{
//
创建全局的唯一实例
protected
static
MemCachedClient mcc
=
new
MemCachedClient();
protected
static
MemCached memCached
=
new
MemCached();
//
设置与缓存服务器的连接池
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
MemCached()
{
}
/**
* 获取唯一实例.
*
@return
*/
public
static
MemCached getInstance()
{
return
memCached;
}
/**
* 添加一个指定的值到缓存中.
*
@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)
{
MemCached cache
=
MemCached.getInstance();
cache.add(
"
hello
"
,
234
);
System.out.print(
"
get value :
"
+
cache.get(
"
hello
"
));
}
}
那么我们就可以通过简单的像main方法中操作的一样存入一个变量,然后再取出进行查看,我们可以看到先调用了add,然后再进行get,我们运行一次
后,234这个值已经被我们存入了memcached的缓存中的了,我们将main方法中红色的那一行注释掉后,我们再运行还是可以看到get到的
value也是234,即缓存中我们已经存在了数据了。
对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为
memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须实现该接口,否则会报错的。比如我们写一个简单的测
试Bean如下:
class
TBean
implements
java.io.Serializable
{
private
static
final
long
serialVersionUID
=
1945562032261336919L
;
private
String name;
public
String getName()
{
return
name;
}
public
void
setName(String name)
{
this
.name
=
name;
}
}
然后我们在main方法中加入如下几行代码:
TBean tb =
new
TBean();
tb.setName(
"
铁木箱子
"
);
cache.add(
"
bean
"
, tb);
TBean tb1
=
(TBean)cache.get(
"
bean
"
);
System.out.print(
"
name=
"
+
tb1.getName());
tb1.setName(
"
铁木箱子_修改的
"
);
tb1
=
(TBean)cache.get(
"
bean
"
);
System.out.print(
"
name=
"
+
tb1.getName());
我们首先把TBean的一个实例放入缓存中,然后再取出来,并进行名称的修改,然后我们再取这个对象,我们再看其名称,发现修改的对象并不是缓存中的对
象,而是通过序列化过来的一个实例对象,这样我们就无须担心对原生类的无意修改导致缓存数据失效了,呵呵~~看来我也是多此一想啊。所以这表明从缓存中获
取的对象是存入对象的一个副本,对获取对象的修改并不能真正的修改缓存中的数据,而应该使用其提供的replace等方法来进行修改。
以上是我在windows下对memcached的一点小学习和实践,在以后的项目开发过程中将会更深入的学习和应用这一缓存工具,也希望和有兴趣的同行一起讨论学习该工具的使用~~
关于telnet显示正在连接到169.254.142.2。。。端口在23:连接失败 的解决方法
在论坛里看到好多朋友都碰到了telnet时显示 正在连接到169.254.142.2....不能打开到主机的连接,端口在 23:连接失败 的事,一般都是因为网卡与安装telnet后虚拟出来的网卡Belcarra USB LAN LINK冲突造成的,需要屏蔽网卡才可以使用telnet功能,但是这样就不可以同时上网了,大家可以试一下以下方法,可以在正常的网络连接的情况下使用telnet功能,互相不影响。
应用服务器安装配置如下(192.168.***.4 ):
参数说明:
-d install 安装为Windows服务
-l 绑定的IP
-m 使用的最大内存(MB),默认64M
-c 最大并发连接数,默认1024
以管理员身份进入命令行,运行安装命令:
C:\Windows\system32>cd E:\memcached-1.2.1-win32
C:\Windows\system32>E:
E:\memcached-1.2.1-win32>memcached.exe -d install
E:\memcached-1.2.1-win32>memcached.exe -l 127.0.0.1 -m 1024 -c 2048 -d start
E:\memcached-1.2.1-win32>
目标源自:http://suntengjiao1.blog.163.com/blog/static/992110882011101651619229/
原 地 址:http://blog.sohu.com/people/!bWFiaXFpYW5nQHNvaHUuY29t/70343632.html
分享到:
相关推荐
本文档主要讲述的是Java环境下Memcached应用详解;...Memcached主要是集群环境下的缓存解决方案,可以运行在Java或者.NET平台上,这里我们主要讲的是Windows下的Memcached应用。希望本文档会给有需要的朋友带来帮助;
内容包含:java_memcached-release_2.6.6.jar包,memcached安装包以及java所需的memcached架包
1.包括windows使用的memcached文件 2.java所需的jar包 3.使用类例子 word文档
一个完整的memcached使用实例,memcached安装在windows上,使用java代码测试memcached是否安装部署成功,包括编译好的exe 及 jar文件,使用请看readme.txt文件
memcached的windows版本直接解压缩到文件夹 c:>memcached.exe -d install c:>memcached.exe -l 127.0.0.1 -m 32 -d start 通过两个命令启动服务器 java 版本的memcached客户端 下载jar包自己参照API实现
memcached-1.4.5 windows版,压缩包中使用说明 在readme.txt中。
memcached1.4.13(32、64位windows)在.Net中使用,引用 Memcached.ClientLibrary.dll,封装成一个单例类,调用方便。
java memcached2 源代码和jar包以及windows和linux的安装文件
memcache java client 2.6.3版本,包括完整的jar包. memcached win 服务端.
b.java_memcached 参考链接:**一定要看,很详细的** http://tech.ddvip.com/2008-10/122405819878206.html ----------memcached服务器的安装与部署---------- 安装服务 D:\memcached-1.4.15>memcachedw32....
1.基于啊里架构师的memcached,java web源代码,导入myecplise直接使用,junit是内置,用添加,删除,查询功能 导入,如出现junit报错,请导入junit4包 2.有jar包alisoft-xplatform-asf-cache-2.5.1 commons-logging...
首先到http://danga.com/memcached/下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可!首先是安装运行memcached服务器,...
第一个:memcached服务,需要安装一个windows下的服务, memcached_en32or64.zip 安装方法,自己上网查找 第二个:需要开发memcached的开发需要的包,一共需要使用4个开发文件包。 java_memcached-release_2.6.3....
windows 64位 menCached服务端 和Java客户端jar包
首先下载相关的memcached文件(用于启动服务的windows.rar在附件中),解压后可以自己选择,这里我选择的是2.1版本的,将其中的memcached.exe和memcached.ini(里面也就这俩文件)拷贝到某路径下(如:E:\java\...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
这里包含了所有的东西.有实例,window环境下安装包,安装文档,使用文档,LINUX下说明文档等等,基本上所有的东西都全...如果是在WINDOWS下测试,安装一下安装包然后执行实例就可以了,命令窗口不要关闭不然取不到值.
Memcached在windows下JAVA使用。有服务器安装文件。有需要使用的Jar包。有源码。以及和spring集成的配置文件。还有封装好的接口和类。直接使用即可。而且也便于扩展。
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...