- 浏览: 193098 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dabing69221:
感谢
linux下安装和配置memcached,以及java操作的示例代码 -
dabing69221:
楼主,写的不错,学习了
linux下安装和配置memcached,以及java操作的示例代码 -
jpsb:
...
Eclipse 保存文件时自动格式化代码 -
lwj1113:
非常感谢
通过WSC的工具来生成SalesForce的WSDL文件描述对象和方法 -
alajl:
写的好,分析过程也能详尽,对于我碰到的问题,很有建设性的帮助
Java NIO类库Selector机制解析(Too many open files 和 No buffer space available)
最近项目中,想用memcached来做分布式缓存。于是学习了一下基本的配置很安装。
具体过程如下:
Linux 安装和配置memcached
1、 下载libevent,因为memcached用到了libevent的类库来处理socket
2、 Libevent下载地址:http://libevent.org/,选个新的稳定版,如2.0.18
3、 下载Memcached,地址为http://memcached.org,当前最新版为1.4.13
4、 将这两个文件上传到linux上:
5、 登录服务器并安装两个软件:
先安装libevent-2.0.18-stable.tar.gz
安装前检查系统是否已经安装有,如果有的话删除旧版本后再安装:
检查命令:
删除旧版本:
再检查后发现没有了
执行一些配置工作,往后在编译
编译往后再安装
说明安装完毕
检查是否安装成功,没有检查出来,呵呵?本人linux不是很熟悉,不知道何故,但是不影响,只要编译和安装过程没有报错就行了!
6、 安装memcached
配置:
或者如果出错要制定libevent的路径
编译和安装
……
7、 运行:
[root@cqt-sw bin]# ./memcached -uroot
如果用root用户运行必须要带-u参数指明运行的用户是谁
8、 测试:
9、 Telnet 172.30.0.1 11211
说明已经连上了,即memcached已经启动了。
在黑屏下输入stats -- 可能看不到输入,不回显,就可以看到当前memcached的运行参数了:
写个java 测试程序:
下载java的客户端lib:https://github.com/gwhalin/Memcached-Java-Client/downloads
Memcached的工具类,还有一些方法没有写出来,可以参考API,将所有的方法都写出来就可以了通用了.
测试的持久化对象,必须要序列化
缓存的数据必须要序列化,否则会报错的:
Juni测试类:MemcachedUtilTest
/// 两个不同的客户端测试:
测试类:MemcachedTest
测试类:MemcachedTest1
完毕,kevin.xie 2012.04.25
具体过程如下:
Linux 安装和配置memcached
1、 下载libevent,因为memcached用到了libevent的类库来处理socket
2、 Libevent下载地址:http://libevent.org/,选个新的稳定版,如2.0.18
3、 下载Memcached,地址为http://memcached.org,当前最新版为1.4.13
4、 将这两个文件上传到linux上:
5、 登录服务器并安装两个软件:
先安装libevent-2.0.18-stable.tar.gz
安装前检查系统是否已经安装有,如果有的话删除旧版本后再安装:
检查命令:
rpm –qa|grep libevent
删除旧版本:
rpm -e libevent-1.1a-3.2.1 –nodeps,nodeps—忽略依赖删除
再检查后发现没有了
[root@cqt-sw softwares]# tar zxvf libevent-2.0.18-stable.tar.gz [root@cqt-sw softwares]# cd libevent-2.0.18-stable [root@cqt-sw softwares]# ./configure –prefix=/usr/local/libevent // 指定安装路径 …. ….
执行一些配置工作,往后在编译
[root@cqt-sw softwares]#make …… ……
编译往后再安装
[root@cqt-sw libevent-2.0.18-stable]# make install make install-recursive …… make[1]: Leaving directory `/opt/softwares/libevent-2.0.18-stable' [root@cqt-sw libevent-2.0.18-stable]#
说明安装完毕
检查是否安装成功,没有检查出来,呵呵?本人linux不是很熟悉,不知道何故,但是不影响,只要编译和安装过程没有报错就行了!
6、 安装memcached
[root@cqt-sw softwares]# tar zvxf memcachaed-1.4.13.tar.gz …… memcachaed-1.4.13/compile [root@cqt-sw softwares]#
配置:
./configure-prefix=/usr/local/memcached-with-libevent
或者如果出错要制定libevent的路径
./configure-prefix=/usr/local/memcached-with-libevent –with-libevent=/usr/local/libevent
编译和安装
[root@cqt-sw memcached-1.4.13]# make
[root@cqt-sw memcached-1.4.13]# make install
……
7、 运行:
[root@cqt-sw bin]# ./memcached -uroot
如果用root用户运行必须要带-u参数指明运行的用户是谁
8、 测试:
9、 Telnet 172.30.0.1 11211
说明已经连上了,即memcached已经启动了。
在黑屏下输入stats -- 可能看不到输入,不回显,就可以看到当前memcached的运行参数了:
写个java 测试程序:
下载java的客户端lib:https://github.com/gwhalin/Memcached-Java-Client/downloads
Memcached的工具类,还有一些方法没有写出来,可以参考API,将所有的方法都写出来就可以了通用了.
/** * MemcachedUtil.java V1.0 2012-4-25 上午09:54:51 * * Copyright 2011 ************. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.kevin.common.util.cache.memcached; import java.util.Date; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; /** * * <pre><b>功能描述:</b>Memcached的工具类 * * @author :****(Kevin.xie)<br> * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public final class MemcachedUtil { /** * <b>构造函数:工具类,禁止实例化</b> * */ private MemcachedUtil() { } // 创建全局的唯一实例 private static MemCachedClient mcc = new MemCachedClient(); /** * 自身实例 */ private static MemcachedUtil memcachedUtil = new MemcachedUtil(); // 设置与缓存服务器的连接池 static { // 服务器列表和其权重 String[] servers = {"172.30.0.1:11211" };// Ip地址和端口号 // 权重 Integer[] weights = {3 }; // 获取socket连接池的实例对象 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); mcc.setPrimitiveAsString(true);// 设置序列化 } /** * * <pre><b>功能描述:</b>获取唯一实例. * * @author :****(Kevin.xie) * <b>创建日期 :</b>2012-4-25 上午10:57:41 * * @return * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public static MemcachedUtil getInstance() { return memcachedUtil; } /** * * <pre><b>功能描述:</b>新增一个缓存数据 * * @author :****(Kevin.xie) * <b>创建日期 :</b>2012-4-25 上午10:55:15 * * @param key 缓存的key * @param value 缓存的值 * @return 操作结果 * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public boolean add(String key, Object value) { // 不会存入缓存 return mcc.add(key, value); // return mcc.set(key, value); } /** * * <pre><b>功能描述:</b>新增一个缓存数据 * * @author :****(Kevin.xie) * <b>创建日期 :</b>2012-4-25 上午10:56:15 * * @param key 缓存的key * @param value 缓存的值 * @param expiry 缓存过期的时间 * @return 操作结果 * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public boolean add(String key, Object value, Date expiry) { // 不会存入缓存 return mcc.add(key, value, expiry); // return mcc.set(key, value, expiry); } /** * <pre><b>功能描述:</b>替换已有的缓存数据 * * @author :****(Kevin.xie) * <b>创建日期 :</b>2012-4-25 上午10:55:34 * * @param key 设置对象的key * @return Object 设置对象的值 * @return 是否替换成功 * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public boolean replace(String key, Object value) { return mcc.replace(key, value); } /** * * <pre><b>功能描述:</b>替换已有的缓存数据 * * @author :****(Kevin.xie) * <b>创建日期 :</b>2012-4-25 上午10:43:17 * * @param key 设置对象的key * @return Object 设置对象的值 * @param expiry 过期时间 * @return 是否替换成功 * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public boolean replace(String key, Object value, Date expiry) { return mcc.replace(key, value, expiry); } /** * * <pre><b>功能描述:</b>根据指定的关键字获取对象 * * @author :****(Kevin.xie) * <b>创建日期 :</b>2012-4-25 上午10:42:49 * * @param key 获取对象的key * @return Object 对象值 * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public Object get(String key) { return mcc.get(key); } }
测试的持久化对象,必须要序列化
/** * Employee.java V1.0 2012-4-25 上午09:50:57 * * Copyright 2011 ************. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.kevin.memcached.model; import java.io.Serializable; /** * * <pre><b>功能描述:</b>员工类,必须要序列化,否则缓存操作时会报错的 * * @author :****(Kevin.xie)<br> * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public class Employee implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = -6487397580836471048L; /** * 员工名字 */ private String EmpName; /** * 部门名 */ private String deptName; /** * 公司名 */ private String companyName; /** * * <b>构造函数:</b> * */ public Employee() { } /** * Access method for the empName property * * @return the empName */ public String getEmpName() { return EmpName; } /** * Sets the value of empName the property * * @param empName the empName to set */ public void setEmpName(String empName) { EmpName = empName; } /** * Access method for the deptName property * * @return the deptName */ public String getDeptName() { return deptName; } /** * Sets the value of deptName the property * * @param deptName the deptName to set */ public void setDeptName(String deptName) { this.deptName = deptName; } /** * Access method for the companyName property * * @return the companyName */ public String getCompanyName() { return companyName; } /** * Sets the value of companyName the property * * @param companyName the companyName to set */ public void setCompanyName(String companyName) { this.companyName = companyName; } }
缓存的数据必须要序列化,否则会报错的:
Juni测试类:MemcachedUtilTest
/** * MemcachedUtilTest.java V1.0 2012-4-25 上午11:00:30 * * Copyright 2011 ************. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.kevin.memcached; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.kevin.common.util.cache.memcached.MemcachedUtil; import com.kevin.memcached.model.Employee; public class MemcachedUtilTest { private Employee emp; private MemcachedUtil cache; @Before public void setUp() throws Exception { emp = new Employee(); emp.setCompanyName("Kevin's Company"); emp.setDeptName("R&D Dept"); emp.setEmpName("Kevin"); // 缓存对象 cache = MemcachedUtil.getInstance(); cache.add("emp", emp); // 缓存基本数据 cache.add("Your salary", 12345.00); } @After public void tearDown() throws Exception { // cache.remove("emp"); // cache.remove("Your salary"); cache = null; emp = null; } @Test public void testAddCache() { } @Test public void testGetCache() { /** * 缓存基本数据 */ MemcachedUtil cache = MemcachedUtil.getInstance(); System.out.println("Your salary : " + cache.get("Your salary")); Employee tempEmp = (Employee) cache.get("emp"); System.out.println("Company: " + tempEmp.getCompanyName()); System.out.println(" Dept: " + tempEmp.getDeptName()); System.out.println(" Name: " + tempEmp.getEmpName()); Assert.assertEquals(emp.getCompanyName(), tempEmp.getCompanyName()); } }
/// 两个不同的客户端测试:
测试类:MemcachedTest
/** * MemcachedTest.java V1.0 2012-4-24 下午05:50:08 * * Copyright 2011 ************. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.kevin.memcached; import com.kevin.common.util.cache.memcached.MemcachedUtil; import com.kevin.memcached.model.Employee; /** * * <pre><b>功能描述:</b>MemcachedTest 测试添加对象缓存,比验证取出的缓存数据是否一致 * * @author :****(Kevin.xie)<br> * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public class MemcachedTest { public static void main(String[] args) { MemcachedUtil cache = MemcachedUtil.getInstance(); Employee emp = new Employee(); emp.setCompanyName("Kevin's Company"); emp.setDeptName("R&D Dept"); emp.setEmpName("Kevin"); cache.add("emp", emp); Employee tempEmp = (Employee) cache.get("emp"); System.out.println("Company: " + tempEmp.getCompanyName()); System.out.println(" Dept: " + tempEmp.getDeptName()); System.out.println(" Name: " + tempEmp.getEmpName()); } }
测试类:MemcachedTest1
/** * MemcachedTest1.java V1.0 2012-4-24 下午11:23:58 * * Copyright 2011 ************. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.kevin.memcached; import com.kevin.common.util.cache.memcached.MemcachedUtil; import com.kevin.memcached.model.Employee; /** * * <pre><b>功能描述:</b>测试取出从MemcachedTest存入的数据是否一致 * * @author :****(Kevin.xie)<br> * * <b>修改历史:</b>(修改人,修改时间,修改原因/内容) * * </pre> */ public class MemcachedTest1 { public static void main(String[] args) { MemcachedUtil cache = MemcachedUtil.getInstance(); cache.add("msg", "Say hello to you !"); System.out.println("get value : " + cache.get("msg")); Employee tempEmp = (Employee) cache.get("emp"); System.out.println("Company: " + tempEmp.getCompanyName()); System.out.println(" Dept: " + tempEmp.getDeptName()); System.out.println(" Name: " + tempEmp.getEmpName()); } }
完毕,kevin.xie 2012.04.25
相关推荐
- **编译安装**:介绍如何配置、编译和安装memcached,包括依赖项的安装。 - **服务启动与管理**:如何启动、停止和监控memcached服务。 3. **Java客户端库**:介绍常用的Java库,如spymemcached、xmemcached等,...
Linux版本下的Memcached和Libmemcached是两种广泛用于提高应用程序性能的开源工具,特别是在处理大量数据缓存时。本文将详细介绍这两个组件以及如何在Redhat 5系统上配置和使用它们。 **Memcached** Memcached是一...
在Linux系统上安装和配置memcached,并通过Java客户端进行调用是常见的操作流程,下面将详细介绍这一过程。 ### 一、memcached的Linux安装 1. **更新系统**: 首先确保你的Linux系统已经更新到最新版本,运行`sudo ...
下面将详细讲解如何在Java项目中集成和使用Memcached,以及配置和测试过程。 首先,Memcached是一个分布式内存对象缓存系统,它通过将数据存储在内存中来减少数据库的负载,从而提高应用程序的性能。Java通过各种...
压缩包中的文档可能包括了Memcached的官方文档、用户手册、教程、示例代码等,这些都是学习和解决Memcached使用过程中问题的宝贵资源。建议仔细阅读和实践,以便深入理解和掌握Memcached。 总之,Memcached作为一款...
2. 引入Spymemcached库,这是Java连接Memcached的常用客户端,示例代码如下: ```java import net.spy.memcached.*; public class MemcachedDemo { public static void main(String[] args) { MemcachedClient...
- **Linux 安装**:对于 Linux 系统,通常通过编译源码安装,下载后执行配置、编译和安装步骤。 4. **Java 访问 Memcached** - **客户端 API**:要从 Java 应用中访问 Memcached,需要下载并引入 Memcached 的...
总结以上内容,本文档主要涵盖了在Java环境下安装和使用Memcached服务器的步骤,以及如何利用Java客户端库(如spymemcached和xmemcached)进行数据存取操作。这些知识点对于开发高并发、高性能的Web应用非常有用。
描述中提到"memcached套装"包含了"memcached linux安装包",这说明这个压缩包提供了在Linux环境下安装和运行memcached所需的所有文件,包括可能的配置脚本、启动和停止服务的命令等。另外,它还包含"hibernate4集成...
在Linux环境下,可以通过包管理器如`apt-get`或`yum`来安装Memcached。安装完成后,需要配置`/etc/memcached.conf`文件,包括监听的端口、最大内存使用量等。启动服务后,可以通过命令行工具`telnet`或`nc`进行简单...
总结,Java中使用Memcached主要涉及选择合适的客户端库,配置连接,以及利用提供的API进行数据的存储、检索和删除操作。通过深入研究源码和使用辅助工具,可以更好地理解和优化Memcached在项目中的应用。
在Linux环境下,可以通过以下步骤安装Memcached: - 使用包管理器(如apt-get或yum)安装:`sudo apt-get install memcached` 或 `sudo yum install memcached` - 启动服务:`sudo service memcached start` - 配置...
6. **配置过程**:集成memcached-session-manager到Tomcat通常涉及修改Tomcat的server.xml配置文件,添加必要的memcached服务器地址和端口,以及session相关的配置参数。 7. **测试成功**:在实际部署前,通常需要...
描述中提到的“包含Linux、Windows、iOS平台的配置”,意味着这份资料涵盖了多种操作系统下的Memcached安装和配置方法,满足不同环境的需求。 在压缩包内的“Memcache示例源码”文件,很可能是用来演示如何在应用...
安装Memcached相对简单,一般通过编译源代码或使用操作系统提供的包管理器完成。配置文件`memcached.conf`允许用户调整内存大小、端口号、超时时间等参数。启动服务后,通过`telnet`或专用的管理工具如`mc-monitor`...
在"memcacheJava"这个压缩包文件中,可能包含了一些示例代码或者更详细的教程,你可以解压后参考学习,以加深对Java与Memcached集成的理解。记住,实践是最好的老师,动手尝试并根据实际情况调整配置和代码,会让你...
**Memcached 安装与测试详解** Memcached 是一款高性能、分布式的内存对象缓存...通过以上介绍,你应该对Memcached的安装、测试以及基本使用有了初步了解。在实际应用中,还需要根据项目需求进行更深入的配置和优化。
在本文中,我们将深入探讨 Memcached 的工作原理、特性、安装配置以及如何在实际应用中有效利用。 **一、Memcached 的工作原理** Memcached基于键值对存储模型,即通过键来定位数据,值则为要存储的数据。它采用...