Memcached的简单使用实例
最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具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,分别解压后即可!
说明:window版本的memcache服务软件下载链接是无效的,我提供一个新的链接
http://splinedancer.com/memcached-win32/
首先是安装运行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"}; //这个端口是memcache服务的端口号,是死的 不知道怎么修改 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")); long expiry = 30*1000; //超时时间为30秒 cache.add("user_name","tom",new Date(expiry)); } }
那么我们就可以通过简单的像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的一点小学习和实践,在以后的项目开发过程中将会更深入的学习和应用这一缓存工具,也希望和有兴趣的同行一起讨论学习该工具的使用
相关推荐
在这个例子中,我们将使用spymemcached,因为它相对轻量级且易于使用。 3. **集成spymemcached** - 添加spymemcached依赖到你的项目。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
与Redis相比,Memcached更简单,专注于高速缓存,而Redis提供了更多的数据结构和持久化功能。选择哪种取决于具体应用场景和需求。 总结,Memcached作为一个高效的内存缓存系统,对于提升Web应用性能有着显著作用。...
使用 Memcached 存储数据非常简单,以下是一个简单的 Python 示例: ```python import pylibmc # 创建客户端连接 client = pylibmc.Client(["127.0.0.1"], binary=True, behaviors={"tcp_nodelay": True}) # 设置...
4. 连接:使用支持Memcached的客户端库(如Python的pylibmc,Java的spymemcached)连接到服务器实例。 5. 存储与检索:将数据存储到Memcached中,使用键值对进行标识,然后根据键来检索数据。 三、Java与Memcached ...
接下来,我们来看一个简单的Java Action类,名为`MemcachedAction.java`,展示了如何在项目中使用Memcached服务: ```java package fi.ltrade.memcached; import java.io.Serializable; import java.util....
### Java使用Memcached简单教程 #### 一、简介 Memcached是一个高性能的分布式内存对象缓存系统,通过减轻数据库负载来加速动态Web应用,提高网站的浏览速度。它通过在内存中缓存数据和对象来减少读取数据库的次数...
以下是一个简单的Java实例,演示如何使用Spymemcached连接到Memcached服务器并执行基本操作: 1. **添加依赖** 首先,你需要在项目中添加Spymemcached的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下...
**标题:“memcached java简单实例”** 在Java开发中,我们常常会遇到缓存的需求,以提高应用程序的性能。Memcached是一款高效的分布式内存对象缓存系统,它能够将数据存储在内存中,从而减少对数据库的访问。这篇...
- **缓存策略选择**:根据业务需求选择合适的缓存系统,如简单缓存场景可选用Memcached,复杂数据结构或需持久化的场景则考虑Redis。 - **缓存失效策略**:除了LRU外,还可以采用Time-To-Live(TTL)、手动清除等方式...
2. **简单的协议**:Memcached使用自定义的文本协议,简洁明了,易于实现和调试。客户端可以轻松地与Memcached进行交互,存储和检索数据。 3. **基于libevent的事件处理**:libevent是一个跨平台的事件通知库,用于...
- **键值对存储**:Memcached存储的数据结构简单,以键值对形式存在,便于快速查找和读写。 - **内存存储**:所有的数据都存储在内存中,保证了高速访问,但同时也限制了数据的持久化能力。 - **CAS(Check and Set...
分布式缓存Memcached实例详解 Memcached是一款由Danga Interactive公司设计并开发的高效、分布式内存对象缓存系统。它的主要目标是减轻数据库的负担,提高动态应用程序的响应速度,通过将数据存储在内存中,使得...
例如,使用Enyim.Caching,你可以创建一个`MemcachedClient`实例并指定服务器: ```csharp var config = new MemcachedClientConfiguration(); config.Servers.Add(new MemcachedServer("localhost", 11211)); ...
Memcached 提供了一种简单但强大的解决方案,它允许应用程序通过网络接口与数据库进行交互,提高了数据访问效率。通过两篇文章《Memcache 和 mysql 交互流程操作原理》和《让 memcached 和 mysql 更好的工作》,我们...
以下是对Memcached简单配置和使用的详细说明: **第一步:引入iBOS jar包** 在使用Memcached之前,首先需要确保你的应用程序中包含了必要的库文件。将iBOS相关的jar包放入应用的lib目录下,这样你的应用程序就能...
"memcached for java client 例子" 指的是一个使用Java语言编写的客户端库,用于与memcached缓存系统进行交互。Memcached是一种高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提升Web应用的响应速度。 **...
在这个例子中,我们首先创建了一个`MemcachedClient`实例,指定了服务器地址("localhost")和端口号(11211,这是默认的Memcached端口)。然后,我们使用`set`方法存储键为"myKey",值为"myValue"的数据,有效期为...
这个压缩包包含了基于.NET的Memcached实例源码和DLL,以及相关的PPT介绍,是学习和理解Memcached在.NET环境下的应用的宝贵资源。 首先,我们来详细了解一下Memcached的基本概念。Memcached是一个简单的键值存储系统...
Memcached是一款高性能的分布式内存缓存系统,它以其简单、高效、可扩展的特性,在IT行业中被广泛应用于缓解数据库压力,提高Web服务响应速度。本文将深入探讨Memcached的核心特性和集成使用方法。 1. **内存存储与...