memcahced部署

Memcached是一个内存数据库,数据以key/value键值对的形式保存在服务器预先分配的内存区块中,由于Memcached服务自身没有对缓存的数据进行持久化存储的设计,因此,在服务器端的Memcached进程重启之后,数据就会丢失。且当内存中缓存的数据容量达到启动时设定的内存值时,也会自动使用LRU算法删除过期的数据

Memcached应用场景

  1. 作为数据库的查询数据缓存
  2. 作为集群节点的session会话共享存储

Memcached预热及重启

  1. 当需要大面积重启Memcached时,首先要在前端控制网站入口的访问流量,然后重启Memcached集群进行预热,所有数据预热完毕之后,再逐步放开前端网站入口流量
  2. 启动集群服务器时,一定要从网站集群的后端一次往前端开启,特别是要提前预热

Memcached删除机制

  1. 不主动检车item对象是否过期,而是在get时才会检查item对象是否过期以及是否应该删除
  2. 当删除item对象时,一般不释放内存空间,而是做删除标记,将指针放入slot回收插槽,下次分配的时候直接使用
  3. 当内存空间满的时候,将会根据LRU算法把最近最少使用的item对象删除
  4. 数据存入可以设定过期时间,但是数据过期后不会立即删除,而是在get时检查item对象是否过期以及是否应该删除
  5. 如果不希望系统使用LRU算法清除数据,可以使用-M参数

安装Memcached

#安装libevent
#Memcached采用的是异步epoll/kqueue非阻塞I/O网络模型,其实现方式是基于异步的libevent时间单进程、单线程模式。使用libevent作为事件通知机制;
#应用程序端通过指定服务器的IP地址及端口,就可以连接Memcached服务进行通信
yum install libevent libevent-devel
 
#安装Memcached
yum安装的版本略低,但是不影响使用,建议使用yum或rpm包方式安装,简单易用
yum install memcached
 
#如果想安装更高版本的则需要编译安装
wget http://memcached.org/files/memcached-1.4.39.tar.gz
tar zxf memcached-1.4.39.tar.gz 
cd memcached-1.4.39
./configure --prefix=/usr/local/memcached
make && make install
ln -s /usr/local/memcached/bin/memcached /usr/bin/memcached
 
#我们可以把启动命令放入/etc/rc.local,以便下次开机自启动

Memcached服务的基本管理

#启动Memcached
memcached -m 16m -p 11211 -d -uroot -c 8192
 
#启动命令相关参数书名
-d 以守护进程方式运行服务
-u 指定运行Memcached用户
-l 指定监听的服务器IP地址,可以不设置此参数
-p 指定监听的端口,默认为11211
-P 保存PID到指定文件 
-m 指定可以缓存数据的最大内存,默认为64MB
-M 服务内存不够时禁止LRU,如果内存满了会报错(rather than removing items)
-L 启用大内存也,可以降低内存浪费,改进性能
-c 最大并发连接数,默认是1024
-t 线程数,默认4.由于Memcached采用的是NIO,所以太多线程作用不大
-R 每个event最大请求数,默认是20
-C 禁用CAS(可以禁止版本计数,减少开销)
 
#关闭Memcached
单实例:ps -ef|grep memcached|grep -v grep|awk '{print $2}'|xargs kill
多实例: kill `cat /var/run/11211.pid`    #启动多实例最好在启动时增加-P参数指定固定的pid文件,这样便于管理

工作中如何配置Memcached

和开发人员进行深入沟通,确定内存大小以及业务的重要性,进行决定是否采用负载均衡、集群,以及确定并发连接数等。对于运维人员,部署Memcached一般就是安装Memcached服务端,把服务启动起来,做好监控,配置好开机自启动。客户端的PHP程序一般在安装LNMP环境时都会提前安装Memcached客户端插件,Java程序环境下,开发人员会用第三方的JAR包直接连接Memcached服务。

原文地址:https://www.cnblogs.com/sellsa/p/7788655.html