最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具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
分享到:
相关推荐
`memcached-1.2.1-win32.zip` 提供了Memcached服务端,而`java_memcached-release_1.6.zip` 提供了Java客户端,使得开发者能够轻松地在Java环境中集成和使用Memcached。学习和掌握这些资源,将有助于构建更加快速、...
总的来说,通过结合"memcached-win64-1.4.4-14.zip"和"java_memcached-release_2.6.6.zip",你可以在Windows环境下建立一个本地Memcached服务,并且在Java应用中实现对这个服务的有效利用,以提升应用程序的性能。...
例如,Java中常用的Memcached客户端有spymemcached、xmemcached等,它们都提供了基本的存取、删除和统计操作。 在Windows环境下,安装Memcached服务器非常简便,只需下载对应版本的可执行文件,双击运行即可启动...
在提供的压缩包中,包含了`java_memcached-release_2.6.6.jar`,这是一个Java客户端库,允许Java应用程序与memcached服务器通信。 1. **添加依赖**:将`java_memcached-release_2.6.6.jar`添加到你的项目类路径中,...
**标题解析:** “memcached安装及java应用使用...总结,本文应该涵盖了从安装memcached到在Java应用中使用它的全面指南,包括相关配置、操作、最佳实践和优化技巧,旨在帮助开发者充分利用memcached来提升应用性能。
一个完整的memcached使用实例,memcached安装在windows上,使用java代码测试memcached是否安装部署成功,包括编译好的exe 及 jar文件,使用请看readme.txt文件
在提供的文件"memcache学习总结(java版-winwods).docx"中,可能详细介绍了如何在Windows环境下使用Java来操作Memcached,包括安装步骤、配置以及基本的增删查改操作。 至于"Memcached_1.2.5.zip",这应该是...
Memcached最初是为Linux环境设计的,但随着其受欢迎程度的增长,也出现了适用于Windows系统的版本,包括Windows和Windows Server。 ### 1. Memcached在Windows上的安装 - **Windows版本**: `memcached Windows.rar...
3. **客户端连接**:多种编程语言都有支持memcached的客户端库,如PHP、Python、Java、C#等,开发者可以使用这些库与memcached服务端交互,执行存取操作。 4. **安全性**:由于memcached默认不提供安全措施,如身份...
这个“memcached-windows64-1.4安装文件”是专为Windows 64位操作系统设计的版本,包含安装所需的所有组件,使得在Windows环境下部署和运行Memcached变得简单。 **工作原理** Memcached基于键值对存储,它的工作...
这个项目包含了 Memcached 的服务端(适用于 Windows)以及 Java 客户端,是开发基于 Java 的分布式应用的重要工具。 ### 一、Memcached 服务端 (Win) Memcached 服务端为 Windows 平台提供了轻量级的内存缓存解决...
在`memcached-1.4.5`这个版本中,针对Windows平台进行了优化和适配。这个版本的亮点在于它提供了一个兼容Windows的二进制版本——`memcached-amd64`,适用于64位的Windows操作系统。这使得Windows用户也能享受到...
4. **客户端库**:选择合适的编程语言(如PHP、Python、Java等)的客户端库,连接到Memcached服务器。 5. **测试和优化**:通过测试确保缓存工作正常,监控内存使用情况,根据需要调整配置。 总的来说,Memcached ...
标题提到的"memcached windows资源 32位, 64位下载"指的是提供适用于Windows平台的32位和64位版本的Memcached安装包。这两个版本分别适用于不同架构的Windows操作系统,32位版本适用于32位操作系统,而64位版本则...
Java使用Memcached是一种常见的缓存策略,特别是在高并发、大数据量的应用场景中,Memcached能够有效地提高系统的响应速度和性能。下面将详细讲解如何在Java项目中集成和使用Memcached,以及配置和测试过程。 首先...
Windows和Linux的安装文件可能包含Memcached服务器的二进制文件,用于在本地系统上部署和运行Memcached服务。 为了使用Java Memcached2,开发者需要先在本地或远程服务器上安装并启动Memcached服务,然后将Java ...
标题中的“memcached1.4.13(32、64位windows)在.Net中使用.zip”指的是在Windows操作系统(包括32位和64位版本)上,使用.NET框架来集成和操作Memcached的版本1.4.13。 在.NET环境中使用Memcached,开发者通常会...
总结来说,Memcached是跨平台的缓存解决方案,适用于Windows和Linux环境。通过正确配置和使用,它可以显著提升Web应用的性能,减少对数据库的依赖,并提供高可用性的数据缓存服务。在部署和使用过程中,注意端口设置...