Memcached服务端安装

ymc4 9年前

libevent安装

cd /tmp  wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz  tar -zxf libevent-1.4.14b-stable.tar.gz  cd libevent-1.4.14b-stable  ./configure --prefix=/opt/libevent/  make  make install

Memcached安装

cd /tmp  wget -N http://www.memcached.org/files/memcached-1.4.17.tar.gz  tar -zxf memcached-1.4.17.tar.gz  cd memcached-1.4.17  ./configure --prefix=/opt/memcached --enable-64bit --with-libevent=/opt/libevent  make  make install

编写Memcached启动脚本

vi /etc/init.d/memcached  #!/bin/sh  # chkconfig: - 50 50  # description: memcached  # 以下要自己配置  CMD=/opt/memcached/bin/memcached  MEMORY=128  USER=root  HOST=master  PORT=11211  CONNECTION=32  PID=/tmp/memcached.pid    start() {      echo -n $"memcached starting... "        $CMD -d -m $MEMORY -u $USER -l $HOST -p $PORT -c $CONNECTION -P $PID      echo  }    stop() {      echo -n $"memcached shutting down... "        kill `cat $PID`      echo  }    case "$1" in      start)          start          ;;      stop)          stop          ;;      restart)          stop          start          ;;      *)      echo $"Usage: $0 {start|stop|restart}"        exit 1  esac  exit 0

将memcached加入系统启项

chmod +x /etc/init.d/memcached  chkconfig --add /etc/init.d/memcached  chkconfig --level 35 memcached on    chkconfig --level 35 iptables off

启动Memcached

/opt/memcached/bin/memcached -d -m 128 -u root -l master -p 11211 -c 32 -P /tmp/memcached.pid    service memcached restart

基于上面,其他一些选项的含义

-d  指定memcached进程作为一个守护进程启动  -m <num>    指定分配给memcached使用的内存,单位是MB  -u <username>   运行memcached的用户  -l <ip_addr>    监听的服务器IP地址,如果有多个地址的话,使用逗号分隔,格式可以为“IP地址:端口号”,例如:-l 指定192.168.0.184:19830,192.168.0.195:13542;端口号也可以通过-p选项指定  -p <num>    Memcached监听的端口,要保证该端口号未被占用  -c <num>    设置最大运行的并发连接数,默认是1024  -R <num>    为避免客户端饿死(starvation),对连续达到的客户端请求数设置一个限额,如果超过该设置,会选择另一个连接来处理请求,默认为20  -k  设置锁定所有分页的内存,对于大缓存应用场景,谨慎使用该选项  -P  保存memcached进程的pid文件  -s <file>   指定Memcached用于监听的UNIX socket文件  -a <perms>  设置-s选项指定的UNIX socket文件的权限  -U <num>    指定监听UDP的端口,默认11211,0表示关闭  -M  当内存使用超出配置值时,禁止自动清除缓存中的数据项,此时Memcached不可以,直到内存被释放  -r  设置产生core文件大小  -f <factor> 用于计算缓存数据项的内存块大小的乘数因子,默认是1.25  -n  为缓存数据项的key、value、flag设置最小分配字节数,默认是48  -C  禁用CAS  -h  显示Memcached版本和摘要信息  -v  输出警告和错误信息  -vv 打印信息比-v更详细:不仅输出警告和错误信息,也输出客户端请求和响应信息  -i  打印libevent和Memcached的licenses信息  -t <threads>    指定用来处理请求的线程数,默认为4  -D <char>   用于统计报告中Key前缀和ID之间的分隔符,默认是冒号“:”  -L  尝试使用大内存分页(pages)  -B <proto>  指定使用的协议,默认行为是自动协商(autonegotiate),可能使用的选项有auto、ascii、binary。  -I <size>   覆盖默认的STAB页大小,默认是1M  -F  禁用flush_all命令  -o <options>    指定逗号分隔的选项,一般用于用于扩展或实验性质的选项

停止Memcached

ps -ef | grep memcached  kill -9 <PID>

Java客户端 - XMemcached客户端

spring.xml

<!-- 启动参数加入 -Dxmemcached.jmx.enable=true 可启动jmx支持 -->  <!-- 监控端可通过service:jmx:rmi:///jndi/rmi://host:7077/xmemcachedServer连接监控 -->  <bean name="memcachedClient"      class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean"      destroy-method="shutdown">      <!-- servers节点列表格式 主节点1:port,主节点1备份:port 主节点2:port,主节点2备份:port -->      <!--可以不设置备份节点,主备节点都好分割,不同的主备分组用空格分隔 -->      <property name="servers">          <value>${cache.memcacheHost}</value>      </property>      <!-- 权重 -->      <property name="weights">          <list>              <value>${cache.memcacheHostWeights1}</value>          </list>      </property>      <!-- 开启sasl验证需要配置此部分 -->      <!-- <bean name="server1" class="java.net.InetSocketAddress"> <constructor-arg>           <value>host1</value> </constructor-arg> <constructor-arg> <value>port1</value>           </constructor-arg> </bean> <property name="authInfoMap"> <map> <entry key-ref="server1">           <bean class="net.rubyeye.xmemcached.auth.AuthInfo" factory-method="typical">           <constructor-arg index="0"> <value>cacheuser</value> </constructor-arg> <constructor-arg           index="1"> <value>123456</value> </constructor-arg> </bean> </entry> </map>           </property> -->      <!-- nio线程数最好是cpu核数-1 -->      <property name="connectionPoolSize">          <value>${cache.memcacheConnectionPoolSize}</value>      </property>      <!--默认超时时间 -->      <property name="opTimeout">          <value>${cache.opTimeout}</value>      </property>      <!-- 使用二进制保存 -->      <property name="commandFactory">          <!-- <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"></bean> -->          <bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>      </property>      <!-- 分布式hash一致策略 -->      <property name="sessionLocator">          <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>      </property>      <!-- 序列化转换 -->      <property name="transcoder">          <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />      </property>      <!-- buffer分配策略 -->      <property name="bufferAllocator">          <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>      </property>      <!-- 在hash一致模式下节点失败路由到下一节点,关闭快速失败模式 -->      <property name="failureMode" value="false" />  </bean>