memcached企業應用場景:
一、數據庫前端的緩存。
讀數據:
開發程序從邏輯上,首先訪問(讀)memcahced,
若是沒有數據在訪問mysql。
寫數據:
若是寫數據,那麼再寫數據庫的同時,
把數據寫入到memcached,或者寫入到mysql的同時,
由mysql複製到memcached。
Linux運維角色:
搭建memcached服務,提供服務(使用信息問開發)
二、集羣后端的共享會話session。
session門票。若是網站內有了這個門票,就能夠瀏覽任意頁面。
解決共享會話方案
一、nginx的調度算法ip_hash(缺點:致使負載不均)
二、經過memcahced作共享會話。
三、cookies(放在用戶瀏覽器端)。
優勢,能夠大併發,缺點:容易篡改,不安全。
參考內容:
http://oldboy.blog.51cto.com/2561410/1331316
http://oldboy.blog.51cto.com/2561410/1323468php
搭建memcached服務
一、libevent(epoll模型,libevent做爲事件通知機制)。
yum install libevent-devel -y
rpm -qa libevent-develhtml
二、memcached
yum install memcached -y
rpm -qa memcached前端
三、啓動服務並檢查
[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 node
四、存取數據實踐
key--->value健值對
inode--->blockmysql
訪問memcached軟件,
telnet,nc
yum install telnet nc -ynginx
telnet 127.0.0.1 11211web
[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
STOREDredis
get k1
VALUE k1 0 6
oldboy
END算法
delete k1
DELETED
get k1
END
===============================
[root@db01 ~]# printf "set key008 0 0 10\r\noldboy0987\r\n"|nc 127.0.0.1 11211
STORED
[root@db01 ~]# printf "get key008\r\n"|nc 127.0.0.1 11211
VALUE key008 0 10
oldboy0987
END
[root@db01 ~]# printf "delete key008\r\n"|nc 127.0.0.1 11211
DELETED
[root@db01 ~]# printf "get key008\r\n"|nc 127.0.0.1 11211
ENDsql
服務端: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\r\n"|nc 127.0.0.1 11211;done
memcache內存管理機制
memcache數據過時及刪除機制
緩存軟件:
memcached同源軟件(相同協議)
memcachedb 持久化(放到磁盤),sina開發的。被redis超越了。
TTSERVER 持久化(放到磁盤)
自身主從複製。
memcache自身不支持集羣。經過其餘方式支持集羣。
集羣:url_hash算法
ip_hash算法
通常要使用一種算法,一致性hash算法。