memcached企业应用场景:
1、数据库前端的缓存。
读数据:
开发程序从逻辑上,首先访问(读)memcahced,
如果没有数据在访问mysql。
写数据:
如果写数据,那么再写数据库的同时,
把数据写入到memcached,或者写入到mysql的同时,
由mysql复制到memcached。
Linux运维角色:
搭建memcached服务,提供服务(使用信息问开发)
2、集群后端的共享会话session。
session门票。如果网站内有了这个门票,就可以浏览任意页面。
解决共享会话方案
1、nginx的调度算法ip_hash(缺点:导致负载不均)
2、通过memcahced做共享会话。
3、cookies(放在用户浏览器端)。
优点,可以大并发,缺点:容易篡改,不安全。
参考内容:
http://oldboy.blog.51cto.com/2561410/1331316
http://oldboy.blog.51cto.com/2561410/1323468
搭建memcached服务
1、libevent(epoll模型,libevent作为事件通知机制)。
yum install libevent-devel -y
rpm -qa libevent-devel
2、memcached
yum install memcached -y
rpm -qa memcached
3、启动服务并检查
[root@db01 ~]# memcached -m 16m -c 2048 -u root -p 11211 -d
[root@db01 ~]# netstat -lntp|grep memcache
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 4026/memcached
tcp 0 0 :::11211 :::* LISTEN 4026/memcached
4、存取数据实践
key--->value健值对
inode--->block
访问memcached软件,
telnet,nc
yum install telnet nc -y
telnet 127.0.0.1 11211
[root@db01 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set k1 0 0 6
oldboy
STORED
get k1
VALUE k1 0 6
oldboy
END
delete k1
DELETED
get k1
END
===============================
[root@db01 ~]# printf "set key008 0 0 10
oldboy0987
"|nc 127.0.0.1 11211
STORED
[root@db01 ~]# printf "get key008
"|nc 127.0.0.1 11211
VALUE key008 0 10
oldboy0987
END
[root@db01 ~]# printf "delete key008
"|nc 127.0.0.1 11211
DELETED
[root@db01 ~]# printf "get key008
"|nc 127.0.0.1 11211
END
服务端:memcached
客户端:memcache
memcache客户端
php所在服务器上安装memcache客户端,程序才能访问到memcached。
memcache安装包的链接地址:http://pan.baidu.com/s/1eStd9Uq
tar zxf memcache-2.2.5.tgz
cd memcache-2.2.5
/application/php/bin/phpize
./configure --enable-memcache --with-php-config=/application/php/bin/php-config
make
make install
cd ../
ls -l /application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/
[root@web02 php]# cat /application/nginx/html/blog/a.php
<?php
phpinfo();
?>
通过页面:blog.etiantian.org/a.php检查mc的配置情况。
配置:
vim /application/php/lib/php.ini
extension_dir = "/application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/"
extension = memcache.so
重启Php
pkill php-fpm
/application/php/sbin/php-fpm
再次通过页面:blog.etiantian.org/a.php检查mc的配置情况。
搜索memcache页面内容,如果有结果,表示成功。
开发Php访问memcached代码。
<?php
$memcache = new Memcache;
$memcache->connect('10.0.0.7', 11211) or die ("Could not connect Mc server");
$memcache->set('key', 'oldboy book');
$get= $memcache->get('key');
echo $get;
?>
管理memcached web端
tar zxvfC memadmin-1.0.12.tar.gz /application/nginx/html/blog/
[root@web02 tools]# ll /application/nginx/html/blog/memadmin/
http://blog.etiantian.org/memadmin
控制命中
for n in {1..10000};do printf "get key
"|nc 127.0.0.1 11211;done
memcache内存管理机制
memcache数据过期及删除机制
缓存软件:
memcached同源软件(相同协议)
memcachedb 持久化(放到磁盘),sina开发的。被redis超越了。
TTSERVER 持久化(放到磁盘)
自身主从复制。
memcache自身不支持集群。通过其他方式支持集群。
集群:url_hash算法
ip_hash算法
一般要使用一种算法,一致性hash算法。