Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。同时也可以用作不同系统之间的数据共享。应用比较广泛。下面介绍一下环境的memcached环境的搭建及简单实用

  1. 1. 下载 libevent。官网下载 libevent
  2. 2. 下载 memcached。官网下载 memcached
  3. 3. 安装libevent,解压压缩包
       1:  ./configure –prefix=/usr/local/libevent
       2:  make
       3:  make install
  4. 4.安装memcached。
  5.    1:  ./configure-prefix=/usr/local/memcached-with-libevent –with-libevent=/usr/local/libevent
       2:  make
       3:  make install

    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }

  6. 5. 运行
  7.    1:  ./memcached -u root

    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }

  8. 不出意外的话,服务器端的安装完毕了。
  9. 简单的Java客户端Demo。使用的是spymemcached客户端

  10. 最近上生产环境因为使用memcached差点导致宕机。由于spymemcached在发不通主机是会不断的请求连接。同时代码的写法有问题,每一次请求都新建了一个客户端。所以需要注意的是,SpyMemcachedManager 应该全局使用一个对象。减少开销。
  11. /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package memcached;

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.SocketAddress;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.concurrent.Future;
    import java.util.concurrent.TimeUnit;
    import net.spy.memcached.AddrUtil;
    import net.spy.memcached.ConnectionObserver;
    import net.spy.memcached.MemcachedClient;
    import net.spy.memcached.transcoders.Transcoder;

    /**
    *
    * @author yingzi.zhu
    */
    public class SpyMemcachedManager {

        private List<String> servers;   // 192.168.159.129:11211
        private MemcachedClient memClient;
        public static int DEFAULT_TIMEOUT = 5;   
        public static TimeUnit DEFAULT_TIMEUNIT = TimeUnit.SECONDS;
       
        public SpyMemcachedManager(List<String> servers) {       
            this.servers = servers;       
        }   
       
        public void connect() throws IOException {       
            if (memClient != null) {           
                return;           
            }       
            StringBuffer buf = new StringBuffer();       
            for (int i = 0; i < servers.size(); i++) {           
                String server = servers.get(i);           
                buf.append(server).append(" ");           
            }       
            memClient = new MemcachedClient(AddrUtil.getAddresses(buf.toString()));       
        }   
       
        public void disConnect() {       
            if (memClient == null) {           
                return;           
            }       
            memClient.shutdown();       
        }   
       
        public void addObserver(ConnectionObserver obs) {       
            memClient.addObserver(obs);       
        }   
       
        public void removeObserver(ConnectionObserver obs) {       
            memClient.removeObserver(obs);       
        }

       
        public boolean set(String key, Object value, int expire) {       
            Future<Boolean> f = memClient.set(key, expire, value);       
            return getBooleanValue(f);       
        }   
       
        public Object get(String key) {       
            return memClient.get(key);       
        }   
       
        public Object asyncGet(String key) {       
            Object obj = null;       
            Future<Object> f = memClient.asyncGet(key);       
            try {           
                obj = f.get(SpyMemcachedManager.DEFAULT_TIMEOUT,
                        SpyMemcachedManager.DEFAULT_TIMEUNIT);           
            } catch (Exception e) {           
                f.cancel(false);           
            }       
            return obj;       
        }   
       
        public boolean add(String key, Object value, int expire) {       
            Future<Boolean> f = memClient.add(key, expire, value);       
            return getBooleanValue(f);       
        }   
       
        public boolean replace(String key, Object value, int expire) {       
            Future<Boolean> f = memClient.replace(key, expire, value);       
            return getBooleanValue(f);       
        }   
       
        public boolean delete(String key) {       
            Future<Boolean> f = memClient.delete(key);       
            return getBooleanValue(f);       
        }   
       
        public boolean flush() {       
            Future<Boolean> f = memClient.flush();       
            return getBooleanValue(f);       
        }   
       
        public Map<String, Object> getMulti(Collection<String> keys) {       
            return memClient.getBulk(keys);       
        }   
       
        public Map<String, Object> getMulti(String[] keys) {       
            return memClient.getBulk(keys);       
        }   
       
        public Map<String, Object> asyncGetMulti(Collection<String> keys) {       
            Map map = null;       
            Future<Map<String, Object>> f = memClient.asyncGetBulk(keys);       
            try {           
                map = f.get(SpyMemcachedManager.DEFAULT_TIMEOUT,
                        SpyMemcachedManager.DEFAULT_TIMEUNIT);           
            } catch (Exception e) {           
                f.cancel(false);           
            }       
            return map;       
        }   
       
        public Map<String, Object> asyncGetMulti(String keys[]) {       
            Map map = null;       
            Future<Map<String, Object>> f = memClient.asyncGetBulk(keys);       
            try {           
                map = f.get(SpyMemcachedManager.DEFAULT_TIMEOUT,
                        SpyMemcachedManager.DEFAULT_TIMEUNIT);           
            } catch (Exception e) {           
                f.cancel(false);           
            }       
            return map;       
        }

        public long increment(String key, int by, long defaultValue, int expire) {       
            return memClient.incr(key, by, defaultValue, expire);       
        }   
       
        public long increment(String key, int by) {       
            return memClient.incr(key, by);       
        }   
       
        public long decrement(String key, int by, long defaultValue, int expire) {       
            return memClient.decr(key, by, defaultValue, expire);       
        }   
       
        public long decrement(String key, int by) {       
            return memClient.decr(key, by);       
        }   
       
        public long asyncIncrement(String key, int by) {       
            Future<Long> f = memClient.asyncIncr(key, by);       
            return getLongValue(f);       
        }   
       
        public long asyncDecrement(String key, int by) {       
            Future<Long> f = memClient.asyncDecr(key, by);       
            return getLongValue(f);       
        }
       
        public void printStats() throws IOException {       
            printStats(null);       
        }   
       
        public void printStats(OutputStream stream) throws IOException {       
            Map<SocketAddress, Map<String, String>> statMap =
                    memClient.getStats();       
            if (stream == null) {           
                stream = System.out;           
            }       
            StringBuffer buf = new StringBuffer();       
            Set<SocketAddress> addrSet = statMap.keySet();       
            Iterator<SocketAddress> iter = addrSet.iterator();       
            while (iter.hasNext()) {           
                SocketAddress addr = iter.next();           
                buf.append(addr.toString() + "/n");           
                Map<String, String> stat = statMap.get(addr);           
                Set<String> keys = stat.keySet();           
                Iterator<String> keyIter = keys.iterator();           
                while (keyIter.hasNext()) {               
                    String key = keyIter.next();               
                    String value = stat.get(key);               
                    buf.append("  key=" + key + ";value=" + value + "/n");               
                }           
                buf.append("/n");           
            }       
            stream.write(buf.toString().getBytes());       
            stream.flush();       
        }   
       
        public Transcoder getTranscoder() {       
            return memClient.getTranscoder();       
        }   
       
        private long getLongValue(Future<Long> f) {       
            try {           
                Long l = f.get(SpyMemcachedManager.DEFAULT_TIMEOUT,
                        SpyMemcachedManager.DEFAULT_TIMEUNIT);           
                return l.longValue();           
            } catch (Exception e) {           
                f.cancel(false);           
            }       
            return -1;       
        }   
       
        private boolean getBooleanValue(Future<Boolean> f) {       
            try {           
                Boolean bool = f.get(SpyMemcachedManager.DEFAULT_TIMEOUT,
                        SpyMemcachedManager.DEFAULT_TIMEUNIT);           
                return bool.booleanValue();           
            } catch (Exception e) {           
                f.cancel(false);           
                return false;           
            }       
        }   
    }
  12. .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }

memcached 的配置及 spymemcached 客户端简单使用的更多相关文章

  1. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  2. Asp.Net Memcached安装配置使用、安全性

    Memcached安装配置使用  一,准备        你需要有一下软件:       VS.NET(05/08)       SQLSERVER       memcached服务器端以及客户端类 ...

  3. Redis:安装、配置、操作和简单代码实例(C语言Client端)

    Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...

  4. 【转】Android Https服务器端和客户端简单实例

    转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 ...

  5. eclipse下的tomcat配置https(最简单得配置https)

    近期公司列出一大堆的东西,其中包括https,啥也不想说,你们是无法理解的苦逼的我的 本文不是双向认证, 双向认证需要让客户端信任自己生成的证书,有点类似登录银行网站的情,如果想知道双向认证的同志可以 ...

  6. Spring Cloud(十四)Config 配置中心与客户端的使用与详细

    前言 在上一篇 文章 中我们直接用了本应在本文中配置的Config Server,对Config也有了一个基本的认识,即 Spring Cloud Config 是一种用来动态获取Git.SVN.本地 ...

  7. RHEL7-openldap安装配置二(客户端安装配置)

    LDAP用户登录流程: 当在客户端输入账号登录系统时,系统根据/etc/nsswitch.conf配置文件获取账号查找顺序,然后再根据PAM配置文件调用相关模块,对账号(/etc/passwd)及密码 ...

  8. spring 5.x 系列第11篇 —— 整合memcached (xml配置方式)

    文章目录 一.说明 1.1 XMemcached客户端说明 1.2 项目结构说明 1.3 依赖说明 二.spring 整合 memcached 2.1 单机配置 2.2 集群配置 2.3 存储基本类型 ...

  9. Apollo(阿波罗)配置中心Java客户端使用指南使用指南

          Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管 ...

随机推荐

  1. Functions that return a function

    javascript学习中,经常会遇到闭包的问题,然后闭包的很多例子中又会遇到很多返回函数的闭包的例子程序.因为对闭包的理解还不够透彻,然后对于Functions rerurn a function产 ...

  2. tomcat 修改根路径

    修改setting.xml 在 </Host> 正上面 添加 <Context path="/" docBase="/TomExam" deb ...

  3. BZOJ 3083 遥远的国度 树链剖分+脑子

    唉..又调了半天QWQ..为何读入挂了.....莫非读入是反着的????据ywy学长所言如是...OvO震惊 这啥骚题啊...还要换根...不过清明讲过...(然鹅我现在才做... 先随便选个点(比如 ...

  4. POJ 3252 区间内一个数的二进制中0的数量要不能少于1的数量(数位DP)

    题意:求区间内二进制中0的数量要不能少于1的数量 分析:很明显的是数位DP: 菜鸟me : 整体上是和数位dp模板差不多的 , 需要注意的是这里有前导零的影响 , 所以需要在dfs()里面增加zor ...

  5. hdu2063 最大二分匹配(匈牙利算法)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. 5.SpringMVC

    1.SpringMVC概述 概述: SpringMVC是基于请求驱动,围绕一个核心Servlet 转发请求到对应的Controller而设计的优点:是一个典型的教科书式的MVC构架,易学易用提供了清晰 ...

  7. HIVE sql取中文

    select regexp_replace(str,'[^\\u4e00-\\u9fa5]','') as str1 from ( select 'test测试test' as str ) t ;

  8. apply,call,bind

    /*apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向): 如果使用apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是 ...

  9. 关于处理百万级大批量数据的mysql运行几个重要点

    处理大批量百万级的数据几点重要知识点: 一:设置php运行的内存配置 ini_set("memory_limit","1200M"); 在php.ini中有如下 ...

  10. linux 命令(Ubuntu)

    1. 我们可以使用下列的命令压缩一个目录: # zip -r archive_name.zip directory_to_compress 2. 下面是如果解压一个zip文档: # unzip arc ...