1.资源文件配置
config.properties
添加
#memcached服务器地址
memchchedIP=192.168.1.8
2.编写工具类
MemUtils
package cn.com.atobo.adm.utils;
 
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
 
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
 
/**
 * memcached 缓存服务器
 * @author guowb
 * @date 2015-8-25 下午6:30:00
 */
public class MemUtils {
    private static Logger logger = Logger.getLogger(MemUtils.class);
 
    private static MemCachedClient mcc = new MemCachedClient();
 
    /** 3600 秒 */
    private static final Integer EXPIRE = 3600;
 
    static {
        SockIOPool pool = SockIOPool.getInstance();// 获取连接池的实例
        String memCached = ResourceUtil.getConfigValueByKey("memchchedIP");// memcached服务器
        pool.setServers(new String[] { memCached + ":11211" });
        pool.setWeights(new Integer[] { 1 });// 权重
 
        pool.setInitConn(10);// 初始连接
        pool.setMinConn(10); // 最小连接
        pool.setMaxConn(1000);// 最大连接
        pool.setMaxIdle(1000 * 60 * 60);// 最大等待
        pool.setMaintSleep(60);// 睡眠时间
        pool.setNagle(false);
        pool.setSocketTO(3000);// 连接超时  3秒
        pool.setSocketConnectTO(0);
        pool.initialize(); // 初始化并启动连接池
    }
 
    /**
     * 添加值 ,存在则添加失败
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:18:06
     */
    public static boolean add(String key, Object value) {
        if(StringUtils.isNotBlank(key)){
            logger.info("new add :key=" + key);
            return mcc.add(key, value, EXPIRE);
        }
        return false;
    }
 
    /**
     * 添加值,存在则替换
     * 如果为用户登陆时产生的数据,则"user"+用户ID
     * 如果为用户没有登陆时产品的数据,则key 由MemcachedBean控制
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:28:49
     */
    public static boolean set(String key, Object value) {
        logger.info("set value :key=" + key);
        return mcc.set(key, value, EXPIRE);
    }
 
    /**
     * 替换值,不存在则替换失败
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:29:08
     */
    public static boolean replace(String key, Object value) {
        logger.info("replace :key=" + key);
        return mcc.replace(key, value, EXPIRE);
    }
 
    /**
     * 取出值
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:30:33
     */
    public static Object get(String key) {
        Object object = mcc.get(key);
        logger.info("key :" + key + " value :" + (object!=null));
        return object;
    }
 
    /**
     * 删除值
     * 
     * @author langwenjie
     * @date 2015-8-25 下午5:51:32
     */
    public static boolean delete(String key) {
        logger.info("delete :" + key);
        return mcc.delete(key);
    }
 
}
3.项目中直接调用
4.服务器上安装memcached 流程

1. 准备安装文件

下载memcached与libevent的安装文件

http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz(memcached下载地址)

https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz(libevent下载地址)

2. 具体安装步骤

1.由于memcached依赖于libevent,因此需要安装libevent。由于linux系统可能默认已经安装libevent,执行命令:

rpm -qa|grep libevent

查看系统是否带有该安装软件,如果有执行命令:

rpm -e libevent-1.4.13-4.el6.x86_64 --nodeps(由于系统自带的版本旧,忽略依赖删除)

3. 安装libevent命令:

tar zxvf libevent-2.0.21-stable.tar.gz

cd libevent-2.0.21-stable

./configure --prefix=/usr/local/libevent

make

make install

至此libevent安装完毕;

安装过程中出现:configure: error : no acceptable C compiler found in $PATH错误时是没有安装gcc,运行如下命令:

yum install gcc* make*

4. 安装memcached命令:

tar zxvf memcached-1.4.2.tar.gz

cd memcached-memcached-1.4.2

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

/usr/local/libevent/

make

make install

至此memcached安装完毕;

5.当启动memcached时经常不能发现libevent.so;可以通过以下命令检查:

进入/usr/local/memcached/bin目录

LD_DEBUG=help ./memcached -v

LD_DEBUG=libs  ./ memcached -v

解决方法:

ln -s /usr/local/libevent/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5

6. 启动memcached

1.打开一个终端,输入以下命令:

./usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 –P /tmp/memcached.pid

启动参数说明:

-d 选项是启动一个守护进程。

-u root 表示启动memcached的用户为root。

-m 是分配给Memcache使用的内存数量,单位是MB,默认64MB。

-M return error on memory exhausted (rather than removing items)。

-u 是运行Memcache的用户,如果当前为root 的话,需要使用此参数指定用户。

-p 是设置Memcache的TCP监听的端口,最好是1024以上的端口。

-c 选项是最大运行的并发连接数,默认是1024。

-P 是设置保存Memcache的pid文件。

另外还有个更详细的参数说明:

Param代码  
  1. memcached 1.4.2
  2. -p       监听的TCP端口(默认: 11211)
  3. -U       监听的UDP端口(默认: 11211, 0表示不监听)
  4. -s      用于监听的UNIX套接字路径(禁用网络支持)
  5. -a      UNIX套接字访问掩码,八进制数字(默认:0700)
  6. -l   监听的IP地址。(默认:INADDR_ANY,所有地址)
  7. -d            作为守护进程来运行。
  8. -r            最大核心文件限制。
  9. -u  设定进程所属用户。(只有root用户可以使用这个参数)
  10. -m       单个数据项的最大可用内存,以MB为单位。(默认:64MB)
  11. -M            内存用光时报错。(不会删除数据)
  12. -c       最大并发连接数。(默认:1024)
  13. -k            锁定所有内存页。注意你可以锁定的内存上限。
  14. 试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。
  15. (不是前面的 -u  参数;在sh下,使用命令"ulimit -S -l NUM_KB"来设置。)
  16. -v            提示信息(在事件循环中打印错误/警告信息。)
  17. -vv           详细信息(还打印客户端命令/响应)
  18. -vvv          超详细信息(还打印内部状态的变化)
  19. -h            打印这个帮助信息并退出。
  20. -i            打印memcached和libevent的许可。
  21. -P      保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义。
  22. -f    块大小增长因子。(默认:1.25)
  23. -n     分配给key+value+flags的最小空间(默认:48)
  24. -L            尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲(TLB)"丢失次数,提高运行效率。
  25. 为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块。
  26. -D      使用  作为前缀和ID的分隔符。
  27. 这个用于按前缀获得状态报告。默认是":"(冒号)。
  28. 如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启。
  29. -t       使用的线程数(默认:4)
  30. -R            每个连接可处理的最大请求数。
  31. -C            禁用CAS。
  32. -b            设置后台日志队列的长度(默认:1024)
  33. -B            绑定协议 - 可能值:ascii,binary,auto(默认)
  34. -I            重写每个数据页尺寸。调整数据项最大尺寸。

也可以启动多个守护进程,但是端口不能重复

查看memcached启动命令

ps aux|grep memcached

7.停止Memcache进程:
   kill `cat /tmp/memcached.pid`

浅谈Mamcached集成web项目的更多相关文章

  1. 浅谈五大Python Web框架

    转载:http://feilong.me/2011/01/talk-about-Python-web-framework 说到Web Framework,Ruby的世界Rails一统江湖,而Pytho ...

  2. 浅谈IDEA集成SSM框架(SpringMVC+Spring+MyBatis)

    前言 学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据 ...

  3. Jenkins持续集成web项目(七)

    功能:用户开发完maven构建的web项目后,从本地提交代码到gogs远程仓库中,在执行 git commit 命令之前会先执行 maven配置的 findbugs插件,来检测项目是否有明显bug,如 ...

  4. 浅谈 OneAPM 在 express 项目中的实践

    [编者按]OneAPM 运营团队,近日在 github 上发现了一篇文章,特别奉献给大家.本文作者王宇先生从2015年年初就开始使用我们的产品,也是OneAPM 的忠实用户. OneAPM 是一个优秀 ...

  5. 浅谈C#实现Web代理服务器的几大步骤

    代理服务程序是一种广泛使用的网络应用程序.代理程序的种类非常多,根据协议不同可以分成HTTP代理服务程序.FTP代理服务程序等,而运行代理服务程序的服务器也就相应称为HTTP代理服务器和FTP代理服务 ...

  6. 浅谈<持续集成、持续交付、持续部署>(一)

    谈谈持续集成,持续交付,持续部署之间的区别 经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢?   假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集 ...

  7. 浅谈HTML移动Web开发(转)

    一.响应式Web设计 PC端常用的两种布局方式就是固定布局和弹性布局,前者设置一个绝大多数电脑能征服显示的固定宽度居中显示,后者则采用百分百. 响应式布局意味着媒体查询,响应式web设计并非新的技术, ...

  8. 浅谈 Axios 在 Vue 项目中的使用

    介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特性 它主要有如下特性: 浏览器端发起XMLHttpRequests请求 Node端发起http ...

  9. 浅谈Android Studio中项目结构中project模式的各个文件和文件夹

    致敬郭霖,这些知识是从第一行代码第二版中直接码下来的,谢谢他,注意每个条目前是否有. 1..gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件,我们无需关心 ...

随机推荐

  1. ActivityManager的使用

    本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括 进程(Process)等.应用程序/包.服务(Serv ...

  2. HDOJ/HDU 2565 放大的X(分段思考~)

    Problem Description 请你编程画一个放大的'X'. 如3*3的'X'应如下所示: X X XX X5*5的'X'如下所示:X X X X X X XX X Input 输入数据第一行 ...

  3. 3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo

    hadoop中的RPC框架实现机制 RPC是Remotr Process Call, 进程间的远程过程调用,不是在一个jvm里. 即,Controller拿不到Service的实例对象. hadoop ...

  4. latin1字符集在navicat下显示乱码(mysql)

    用navicat查看一个表的内容时显示如下

  5. Using OpenCV with gcc and CMake

    Using OpenCV with gcc and CMake Note We assume that you have successfully installed OpenCV in your w ...

  6. 事物复制中大项目(Large Article)出问题如何快速修复

    事物日志中如果大的发布项目(Article)出问题了,并且影响了系统的使用,如何快速的解决? 一般的做法是重新用快照或者备份初始化,但是如果出问题的表非常大(上亿的记录,几十GB的数据),使用初始化是 ...

  7. RestService中的 get post put delete

    HTTP 定义了与服务器交互的不同方法,最基本的有四种方法:GET,POST,PUT,DELETE.URL即资源描述符,我们可以这样认为:一个URL地址, 用于描述一个网络上的资源,而HTTP中的GE ...

  8. c#将金额转换为大写,支持小数点,原创经典

    网上搜的都有问题,这个代码属于原创,代码简洁,支持小数点,若没有小数点,则为整 /// <summary> /// 将金额转换成大写 /// </summary> /// &l ...

  9. java树状结构之二叉树

    参考:http://blog.csdn.net/zhangerqing/article/details/8822476 前面已经提到过树和二叉树的相关概念内容,下面主要来介绍下关于二叉树的创建,遍历, ...

  10. 博客搬家到 http://fresky.github.io/ - Visual Studio的插件Pdbproj可以把pdb转换成C++项目

    博客搬到了Dawei XU,请各位看官挪步.最新的一篇是:Visual Studio的插件Pdbproj可以把pdb转换成C++项目.