环境准备
yum install libevent-devel -y
下载包
wget http://www.memcached.org/files/memcached-1.5.8.tar.gz
tar xf memcached-1.5.8.tar.gz
cd memcached-1.5.8/
安装检验
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/lib
make &&make install
开启
/usr/local/memcached/bin/memcached -m 16m -c 2048 -u root -p 11211 -d
cp memcached /etc/init.d/memcached
chmod a+x /etc/init.d/memcached
参数
-m:给多大内存、 -c 最大并发多少用户、 -u:以什么用户运行、 -p:启动的端口(默认11211)、 -d:daemon(守护进程运行)
检验
netstat -lntup
nc检验
yum install -y nc
[root@pa2 ~]# printf "set key007 0 3 10\r\nlijinghua0\r\n"|nc 127.0.0.1 11211 #这里的3代表超时时间为3秒 /n后面代表值的位数
STORED
[root@pa2 ~]# printf "get key007\r\n"|nc 127.0.0.1 11211
VALUE key007 0 10
lijinghua0
END
telnet检验
[root@pa2 etc]# telnet 58.87.104.82 11211
Trying 58.87.104.82...
Connected to 58.87.104.82.
Escape character is '^]'.
set k1 0 0 6
oldboy
STORED
ERROR
get k1
VALUE k1 0 6
oldboy
END
quit #退出
MySQL与Memcached操作命令对比
MySQL的insert语句 ======== Memcached的set命令 MySQL的select语句 ======== Memcached的get命令 MySQL的delete语句 ======== Memcached的delete命令
php配置连接memcached
配置文件更改
[root@pa2 etc]# tail -5 php.ini
extension=memcached.so
session.save_handler = memcache
session.save_path = "tcp://58.87.104.82:11211"
基础依赖
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18/
./configure --prefix=/usr/local/libmemcached --with-memcached
/usr/local/php/sbin/php-fpm -m
/usr/local/php/sbin/php-fpm -i
php_memcached模块
wget http://pecl.php.net/get/memcached-2.2.0.tgz
tar -zxf memcached-2.2.0.tgz
phpize
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
make && make install
配置文件里面添加扩展及连接memcache
vim php.ini
;添加memcache依赖
;extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"
extension=redis.so
;php配置连接memcache
;session.save_handler = files
session.save_handler = memcache
;session.save_path = "/tmp"
session.save_path = "tcp://58.87.104.82:11211"
#多个环境下重启时要指定配置文件 例如:
/www/web/php/sbin/php-fpm -c /www/web/php/etc/php.ini
phpinfo查看页
session.save_handler memcache memcache
session.save_path tcp://58.87.104.82:11211 tcp://58.87.104.82:11211
memadmin了解一下
Memcached在集群中的session共享存储的优缺点
优点:
- 读写速度上会比普通files速度快很多
- 可以解决多个服务器共用session的难题
缺点:
- session数据都保存在memory中,持久化方面有所欠缺,但对session数据来说不是问题。
- 一般是单台,如果部署多台,多台之间无法数据同步。通过hash算法分配依然有session丢失的问题。 对于以上的缺点,解决思路如下:
- 可以用其他的持久化系统存储session,例如:Redis、ttserver来替代Memcached。
- 高性能高并发场景,cookies效率比session要好很多,因此,大网站都会用cookies解决会话共享问题。
- 有初级运维网友通过牺牲LB的负载均衡的策略实现,例如:lvs-p、nginx ip_hash等,但这些都不是好的方法