• memcached集群安装与测试


    1.上传安装包

    libevent-2.0.22-stable.tar.gz

    memcached-1.4.24.tar.gz

    2.安装libevent

    创建目录 

    mkdir -p /apps/install/libevent

    解压

    tar -zxvf libevent-2.0.22-stable.tar.gz -C /apps/install/libevent

    安装

    cd libevent-2.0.22-stable/

    ./configure

    --prefix=/usr/local/libevent/

    make

    make install

    3.安装memcached

    创建目录

    mkdir -p /apps/install/memcached

    解压

    tar -zxvf /apps/softWare/memcached/memcached-1.4.24.tar.gz -C /apps/install/memcahced/

    安装

    cd memcached-1.4.24/

    ./configure

    --prefix=/usr/local/memcached/
    --with-libevent=/usr/local/libevent/

    make

    make install 

    4.启动memcached

    /usr/local/memcached/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /tmp/memcached.pid

    5.测试

    a.安装telnet,telnet-server

    查看是否有telnet

     rpm -qa|grep telnet

    没有

    安装telnet

    yum -y install telnet

     测试

    telnet localhost 12000

    缓存key1

    set key1 0 60 4

    helloworld

    获取缓存key1

    get key1

    退出编辑

    ctrl+]

    退出telnet

    quit

    6.集群测试

    服务器:

    192.168.158.129

    192.168.158.128

    在这2台服务器上分别开启2个端口

    192.168.158.129:12011

    192.168.158.129:12012

    192.168.158.128:12021

    192.168.158.128:12022

    分别启动这4个实例

    /usr/local/memcached/bin/memcached -d -m 10 -u root -l 192.168.158.128 -p 12011 -c 256 -P /tmp/memcached1.pid
    /usr/local/memcached/bin/memcached -d -m 10 -u root -l 192.168.158.128 -p 12012 -c 256 -P /tmp/memcached2.pid
    /usr/local/memcached/bin/memcached -d -m 10 -u root -l 192.168.158.129 -p 12021 -c 256 -P /tmp/memcached1.pid
    /usr/local/memcached/bin/memcached -d -m 10 -u root -l 192.168.158.129 -p 12022 -c 256 -P /tmp/memcached2.pid

    集群配置

    <?xml version="1.0" encoding="UTF-8"?>
    <memcached>
        	<client name="mclient0" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool0">
            	<errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
        	</client>
        
    		<client name="mclient0-back" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool0-back">
            	<errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
        	</client>
        	
    		<socketpool name="pool0" failover="true" initConn="20" minConn="20" maxConn="100" maintSleep="0"
            					nagle="false" socketTO="3000" aliveCheck="true">
            		<servers>192.168.158.129:12011,192.168.158.128:12021</servers>
       		</socketpool>   		
       		  
    		<socketpool name="pool0-back" failover="true" initConn="20" minConn="20" maxConn="100" maintSleep="0" 
    							nagle="false" socketTO="3000" aliveCheck="true">
            		<servers>192.168.158.129:12012,192.168.158.128:12022</servers>
       		</socketpool>
    
    		<cluster name="cluster1" mode="active">      <!--   //mode = active,standby -->
           	 	<memCachedClients>mclient0,mclient0-back</memCachedClients>
       		</cluster>
    
    </memcached>
    

    主要API

    package guo.test.MemcachedDemo;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import com.alisoft.xplatform.asf.cache.ICacheManager;
    import com.alisoft.xplatform.asf.cache.IMemcachedCache;
    import com.alisoft.xplatform.asf.cache.memcached.CacheUtil;
    import com.alisoft.xplatform.asf.cache.memcached.MemcachedCacheManager;
    
    
    /**
     * @author 
     * @create  2015-06-12
     * @version 1.0
     * @Function 基于alimemcachedClient 构建memcached集群的工具类,集群配置详见:memcached_cluster.xml.
     */
    public class AliClusterCacheUtil {
    	private static ICacheManager<IMemcachedCache> manager;
    	public static IMemcachedCache cache;        //开放cache,仅为了部分同志存在个性化需求。
    	static{        
            manager = CacheUtil.getCacheManager(IMemcachedCache.class,MemcachedCacheManager.class.getName());
            String configFile=Config.getConfig("memcached_session_configPath");
            manager.setConfigFile(configFile);
            manager.start();
            cache = manager.getCache("mclient0");
    	}
    
    	/**
    	 * 保存数据
    	 * @param key
    	 * @param value
    	 * @return
    	 */
    	public static void put(String key,Object value){
    		cache.put(key, value);
    	}
    	
    	/**
    	 * 保存有有效期的数据
    	 * @param key
    	 * @param value
    	 * @param 设置有效期为距离当前时间后TTL秒。
    	 * @return
    	 */
    	public static void put(String key,Object value,int TTL){
    		cache.put(key, value, TTL);
    	}
    	
    	/**
    	 * 保存有有效期的数据
    	 * @param key
    	 * @param value
    	 * @param 有效期(取的是客户端时间)
    	 * @return
    	 */
    	public static void put(String key,Object value,Date date){
    		cache.put(key, value, date);
    	}
    	
    	/**
    	 * 获取缓存数据
    	 * @param key
    	 * @return Object
    	 */
    	public static Object get(String key){
    		return cache.get(key);
    	}
    	
    	/**
    	 * 移出缓存数据
    	 * @param key
    	 * @return Object
    	 */
    	public static Object remove(String key){
    		return cache.remove(key);
    	}
    	
    	/**
    	 * 删除所有缓存内的数据
    	 * @return boolean
    	 */
    	public static boolean clear(){
    		return cache.clear();
    	}
    	
    	/**
    	 * 是否包含了指定key的数据
    	 * @param key
    	 * @return boolean
    	 */
    	public static boolean containsKey(String key){
    		return cache.containsKey(key);
    	}
    	
    	/**
    	 * 释放Cache占用的资源
    	 */
    	public static void destroy(){
    		cache.destroy();
    	}
    	
    	/**
    	 * 降低memcache的交互频繁造成的性能损失,因此采用本地cache结合memcache的方式
    	 * @param key
    	 * @param 本地缓存该数据有效秒数
    	 * @return
    	 */
    	public static Object get(String key,int localTTL){
    		return cache.get(key, localTTL);
    	}
    
    	/**
    	 * 动态重新载入配置文件,可用于实现动态扩容。
    	 */
    	public static void reload(String configfile){
    		manager.reload(configfile);
    	}
    	
    	public static void main(String[] args) {
    		AliClusterCacheUtil.put("guo", "you are the sun");
    		String key = (String) AliClusterCacheUtil.get("guo");
    		System.out.println("get the value is:"+key);
    		
    		List list = new ArrayList();
    		list.add("a");
    		list.add("b");
    		AliClusterCacheUtil.put("list", list);
    		List tmp = (List) AliClusterCacheUtil.get("list");
    		System.out.println("get the list is:"+tmp);
    	}
    }
    

    运行

    AliClusterCacheUtil.java 中的main方法进行测试,能够正常缓存与获取,当遇到异常,一台缓存服务器宕机或一个实例异常,可以正常切换。

    集群满足要求。

    MemcachedDemo 在百度云盘中

    地址:  http://pan.baidu.com/s/1nuAcuPN

    可参考:

    http://www.tashan10.com/memcachedda-jian-huan-cun-xi-tong/

    http://www.cnblogs.com/wayne173/p/5652034.html

  • 相关阅读:
    Spring IOC -bean对象的生命周期详解
    @RequestBody 和@ResponseBody 注解详解
    SpringMVC访问静态资源的三种方式
    servlet的url-pattern匹配规则详细描述
    SpringMVC POJO入参过程分析
    SpringMVC @ModelAttribute详解
    SpringMVC @SessionAttributes注解
    SpringMVC 向页面传值-Map、Model和ModelMap
    SpringMVC 向前台页面传值-ModelAndView
    SpringMVC 使用Servlet原生API作为参数
  • 原文地址:https://www.cnblogs.com/yun965861480/p/6305477.html
Copyright © 2020-2023  润新知