`

linux下安装和配置memcached,以及java操作的示例代码

 
阅读更多
最近项目中,想用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

安装前检查系统是否已经安装有,如果有的话删除旧版本后再安装:
检查命令:
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

  • 大小: 57 KB
  • 大小: 39.6 KB
  • 大小: 24.7 KB
  • 大小: 27.1 KB
  • 大小: 5.4 KB
  • 大小: 13.1 KB
  • 大小: 26 KB
  • 大小: 20.3 KB
  • 大小: 12.1 KB
  • 大小: 11.6 KB
  • 大小: 8 KB
  • 大小: 17.3 KB
  • 大小: 12.7 KB
  • 大小: 16.5 KB
  • 大小: 16.5 KB
  • 大小: 20 KB
  • 大小: 20.2 KB
  • 大小: 43.6 KB
  • 大小: 7.7 KB
  • 大小: 47.7 KB
  • 大小: 42 KB
  • 大小: 45.3 KB
  • 大小: 42.3 KB
  • 大小: 28.2 KB
  • 大小: 27.8 KB
  • 大小: 25.1 KB
分享到:
评论
2 楼 dabing69221 2017-09-30  
感谢  
1 楼 dabing69221 2017-09-30  
楼主,写的不错,学习了

相关推荐

    memcached安装及java应用使用memcached

    - **编译安装**:介绍如何配置、编译和安装memcached,包括依赖项的安装。 - **服务启动与管理**:如何启动、停止和监控memcached服务。 3. **Java客户端库**:介绍常用的Java库,如spymemcached、xmemcached等,...

    linux版本下memcached+libmemcached

    Linux版本下的Memcached和Libmemcached是两种广泛用于提高应用程序性能的开源工具,特别是在处理大量数据缓存时。本文将详细介绍这两个组件以及如何在Redhat 5系统上配置和使用它们。 **Memcached** Memcached是一...

    memcached linux安装说明+ java客户端调用例子

    在Linux系统上安装和配置memcached,并通过Java客户端进行调用是常见的操作流程,下面将详细介绍这一过程。 ### 一、memcached的Linux安装 1. **更新系统**: 首先确保你的Linux系统已经更新到最新版本,运行`sudo ...

    Java使用memcached步骤(含源码及配置).zip

    下面将详细讲解如何在Java项目中集成和使用Memcached,以及配置和测试过程。 首先,Memcached是一个分布式内存对象缓存系统,它通过将数据存储在内存中来减少数据库的负载,从而提高应用程序的性能。Java通过各种...

    Memcached实例与文档

    压缩包中的文档可能包括了Memcached的官方文档、用户手册、教程、示例代码等,这些都是学习和解决Memcached使用过程中问题的宝贵资源。建议仔细阅读和实践,以便深入理解和掌握Memcached。 总之,Memcached作为一款...

    memcached linux部署包及jar.rar

    2. 引入Spymemcached库,这是Java连接Memcached的常用客户端,示例代码如下: ```java import net.spy.memcached.*; public class MemcachedDemo { public static void main(String[] args) { MemcachedClient...

    java 缓存系统实战(安装和实例代码)

    - **Linux 安装**:对于 Linux 系统,通常通过编译源码安装,下载后执行配置、编译和安装步骤。 4. **Java 访问 Memcached** - **客户端 API**:要从 Java 应用中访问 Memcached,需要下载并引入 Memcached 的...

    JAVA的memcache服务器安装以及相关最新jar包

    总结以上内容,本文档主要涵盖了在Java环境下安装和使用Memcached服务器的步骤,以及如何利用Java客户端库(如spymemcached和xmemcached)进行数据存取操作。这些知识点对于开发高并发、高性能的Web应用非常有用。

    memcached套装

    描述中提到"memcached套装"包含了"memcached linux安装包",这说明这个压缩包提供了在Linux环境下安装和运行memcached所需的所有文件,包括可能的配置脚本、启动和停止服务的命令等。另外,它还包含"hibernate4集成...

    memcached资源demo(已调试通过)

    在Linux环境下,可以通过包管理器如`apt-get`或`yum`来安装Memcached。安装完成后,需要配置`/etc/memcached.conf`文件,包括监听的端口、最大内存使用量等。启动服务后,可以通过命令行工具`telnet`或`nc`进行简单...

    java memcache 使用

    总结,Java中使用Memcached主要涉及选择合适的客户端库,配置连接,以及利用提供的API进行数据的存储、检索和删除操作。通过深入研究源码和使用辅助工具,可以更好地理解和优化Memcached在项目中的应用。

    Memcached入门(附安装包及测试代码)

    在Linux环境下,可以通过以下步骤安装Memcached: - 使用包管理器(如apt-get或yum)安装:`sudo apt-get install memcached` 或 `sudo yum install memcached` - 启动服务:`sudo service memcached start` - 配置...

    memcached-session-manager_4_tomcat8

    6. **配置过程**:集成memcached-session-manager到Tomcat通常涉及修改Tomcat的server.xml配置文件,添加必要的memcached服务器地址和端口,以及session相关的配置参数。 7. **测试成功**:在实际部署前,通常需要...

    memcached缓存组件资料.rar

    描述中提到的“包含Linux、Windows、iOS平台的配置”,意味着这份资料涵盖了多种操作系统下的Memcached安装和配置方法,满足不同环境的需求。 在压缩包内的“Memcache示例源码”文件,很可能是用来演示如何在应用...

    memcached_1.4.4.rar

    安装Memcached相对简单,一般通过编译源代码或使用操作系统提供的包管理器完成。配置文件`memcached.conf`允许用户调整内存大小、端口号、超时时间等参数。启动服务后,通过`telnet`或专用的管理工具如`mc-monitor`...

    java memcache使用例子

    在"memcacheJava"这个压缩包文件中,可能包含了一些示例代码或者更详细的教程,你可以解压后参考学习,以加深对Java与Memcached集成的理解。记住,实践是最好的老师,动手尝试并根据实际情况调整配置和代码,会让你...

    memcached安装包及测试

    **Memcached 安装与测试详解** Memcached 是一款高性能、分布式的内存对象缓存...通过以上介绍,你应该对Memcached的安装、测试以及基本使用有了初步了解。在实际应用中,还需要根据项目需求进行更深入的配置和优化。

    Memcached完全剖析(转)

    在本文中,我们将深入探讨 Memcached 的工作原理、特性、安装配置以及如何在实际应用中有效利用。 **一、Memcached 的工作原理** Memcached基于键值对存储模型,即通过键来定位数据,值则为要存储的数据。它采用...

Global site tag (gtag.js) - Google Analytics