官网地址:http://memcached.org/


  1. 下载并安装memcached服务器端软件


windows 32位:memcached-win32-1.4.4-14.zip

下载页面:http://blog.couchbase.com/memcached-144-windows-32-bit-binary-now-available


windows 64位:memcached-win64-1.4.4-14.zip

下载页面:http://blog.couchbase.com/memcached-windows-64-bit-pre-release-available


网盘下载:链接:http://pan.baidu.com/s/1o7YnVgY 密码:zhj9


2.  以管理员身份运行 cmd.exe,并转至memcached所在文件夹,比如:

cd D:\wamp_win7\bin\memcached-win32-1.4.4-14

注意:如果不以管理员身份运行,将得到报错“failed to install service or service already installed”


3.  安装memcached:  

d:\wamp_win7\bin\memcached-win32-1.4.4-14> memcached.exe -d install

(之后屏幕无任何提示,可以再[控制面板]->[管理工具]->[服务]中查看到memcached)


4.  启动memcached:

(1)启动方法1:

d:\wamp_win7\bin\memcached-win32-1.4.4-14> memcached.exe -d start

之后屏幕无任何提示,但是在“任务管理器”中勾选“显示所有用户进程”,此时可以看到memcached.exe进程正在运行

默认端口11211,外部访问需要开放该端口,否则无法成功连接。

(2)启动方法2:

[控制面板]->[管理工具]->[服务] 找到 memcached 服务双击打开面板

启动类型:选择【自动】

服务状态:点击下面的【启动】

备注:可执行文件的路径和我上面所说的路径有些区别可以忽略


5.  memcached基本参数设置:

-p 监听的端口

-l 连接的IP地址, 默认是本机

-d start 启动memcached服务

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务

-u 以的身份运行 (仅在以root运行的时候有效)

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48

-h 显示帮助


设置参数时需要先停止memcached,然后用命令行设置,比如:

D:\wamp_win7\bin\memcached-win32-1.4.4-14> memcached.exe -m 1 -d start


6.  停止memcached:

D:\wamp_win7\bin\memcached-win32-1.4.4-14> memcached.exe -d stop


7.  卸载memcached:

D:\wamp_win7\bin\memcached-win32-1.4.4-14> memcached.exe -d uninstall


8.  相关问题:

1、设置最大占用内存后好像没起作用。

-m tells memcached how much RAM to use for item storage (in megabytes). Note carefully that this isn't a global memory limit, so memcached will use a few % more memory than you tell it to. Set this to safe values. Setting it to less than 48 megabytes does not work properly in 1.4.x and earlier. It will still use the memory.

转自:http://stackoverflow.com/questions/6112324/memcached-using-more-than-max-memory

参考:https://code.google.com/p/memcached/wiki/NewConfiguringServer


2、在同一个程序集里将一个值放入到memcache里,马上去时可以取到,但是在另一个程序集里取的时候取不到,或者telnet也拿不到值。

可能问题及解决办法:

  a. 存储的值序列化后不同类型,则需要将其更新为同一类型,建议使用同一的常见类型,如string,int等,放入string可以拼成一个xml字符串,然后到使用的时候在做解析

  b. 很有可能是memcache池已经满了,可以设置<socketPool minPoolSize="100" maxPoolSize="1000" connectionTimeout="00:10:00" deadTimeout="00:02:00"/>


9.  tomcat+memcached 实现session共享

    1)下载相关jar

    链接:http://pan.baidu.com/s/1eSodF3c 密码:lf7x

    将相关jar包中的jar包全部复制到每个tomcat的lib目录

    tomcat6与tomcat7的jar包不同,注意区分

    

    2)修改每个Tomcat\conf\content.xml文件

    在content中增加如下代码:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   memcachedNodes="n1:127.0.0.1:11211"
   sticky="false"
   lockingMode="auto"
   sessionBackupAsync="false"
   requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
   sessionBackupTimeout="1000"  transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>


10.  Manager标签属性说明:

  • className: 此属性是必须的。

  • memcachedNodes: 此属性是必须的,这个属性必须包含你所有运行的memcached节点。多个之间用空格或半角逗号隔开(如:memcachedNodes="n1:localhost:11211,n2:localhost:11212")。

  • failoverNodes: 可选项,属性只能用在非粘连Session机制中。此属性必须包含memcached节点的Id,此节点是Tomcat作为备份使用。多个之间用空格或逗号隔开

  • memcachedProtocol: 可选项,默认为text。出属性指明memcached使用的存储协议。只支持text或者binary。

  • sticky: 可选项,默认为true。 指定使用粘性的还是非粘性的Session机制。

  • lockingMode: 可选项, 此属性只对非粘性Session有用,默认为none。

    指定非粘性Session的锁定策略。他的只有

     (1)、none:从来不加锁

     (2)、all: 当请求时对Session锁定,直到请求结束

     (3)、auto:对只读的request不加锁,对非只读的request加锁

     (4)、uriPattern:<regexp>: 使用正则表达式来比较requestRUI + "?" + queryString来决定是否加锁,

  • requestUriIgnorePattern:  可选项 此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。

  • sessionBackupAsync: 可选项,默认true指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。

  • backupThreadCount: 可选项,默认为CPU内核数。用来异步保存Session的线程数(如果sessionBackupAsync="true")。

  • sessionBackupTimeout:  可选项,默认100,单位毫秒,设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync="false"是起作用。默认100毫秒

  • sessionAttributeFilter: 可选项 从1.5.0版本有此属性是用来控制Session中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName"和"sessionHistory"属性保存到Memcached中。依赖于选择的序列化策略。

  • transcoderFactoryClass 可选,默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory此属性值是创建序列化和反序列化保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm-javolution-serializer.

  • copyCollectionsForSerialization 可选项,默认false。

  • customConverter 可选项

  • enableStatistics 可选项,默认true用来指定是否进行统计。

  • enabled 可选项,默认true,指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。

更多说明请看:http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration


11.  测试页面

<%@page language="java" import="java.util.*" contentType="text/html;charset=UTF-8" %>
SessionID:<%=session.getId()%>    
<BR>    
SessionIP:<%=request.getServerName()%>    
<BR>    
SessionPort:<%=request.getServerPort()%>
<BR>
<%out.println("This is Tomcat Server 1");%>



另外linux操作系统的Memcached安装配置可参考:

http://www.cnblogs.com/AloneSword/p/4481964.html


注意:本文归作者所有,未经作者允许,不得转载