您好,登錄后才能下訂單哦!
?Memcached 是一個高性能的分布式內存對象緩存系統,用于動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。Memcached基于一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協議與守護進程通信。
1、協議簡單;
2、基于libevent的事件處理;
3、內置內存存儲方式;
4、memcached不互相通信的分布式。
為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由于數據僅存在于內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。另外,內容容量達到指定值之后,就基于LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此并沒有過多考慮數據的永久性問題。
Memcached處理的原子是每一個(key,value)對(以下簡稱kv對),key會通過一個hash算法轉化成hash-key,便于查找、對比以及做到盡可能的散列。同時,memcached用的是一個二級散列,通過一張大hash表來維護。
Memcached有兩個核心組件組成:服務器端(server)和客戶端(client),在一個memcached的查詢中,client先通過計算key的hash值來確定kv對所處在的server位置。當server確定后,客戶端就會發送一個查詢請求給對應的server,讓它來查找確切的數據。因為這之間沒有交互以及多播協議,所以memcached交互帶給網絡的影響是最小化的。
memcached服務器 192.168.13.128 (memcached-1.5.6.tar.gz、libevent-2.1.8-stable.tar.gz)
memcache客戶端 192.168.13.129 (memcache-2.2.7.tgz 、LAMP)
[root@server ~]# yum install -y gcc gcc-c++ make ##安裝環境組件
[root@server ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/
Password for root@//192.168.100.3/LNMP-C7:
[root@server ~]# cd /mnt/memcached/
[root@server memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/ ##事件通知庫
[root@server memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt/ ##解壓事件庫服務端
[root@server memcached]# cd /opt/libevent-2.1.8-stable/
[root@server libevent-2.1.8-stable]# ./configure \ ##配置
> --prefix=/usr/local/libevent ##安裝路徑
[root@server libevent-2.1.8-stable]# make && make install ##編譯安裝
[root@server libevent-2.1.8-stable]# cd /opt/memcached-1.5.6/
[root@server memcached-1.5.6]# ./configure \
> --prefix=/usr/local/memcached \
> --with-libevent=/usr/local/libevent ##關聯libevent事件通知庫
[root@server memcached-1.5.6]# make && make install
[root@server memcached-1.5.6]# ln -s /usr/local/memcached/bin/* /usr/local/bin/ ##建立軟連接
[root@server memcached-1.5.6]# memcached -d -m 32m -p11211 -uroot ##開啟服務
##-d守護進程 ;-m緩存大小32M ;-p端口11211
[root@server memcached-1.5.6]# netstat -ntap | grep memcached ##查看端口
[root@server memcached-1.5.6]# systemctl stop firewalld.service
[root@server memcached-1.5.6]# setenforce 0
[root@server memcached-1.5.6]# yum install telnet -y ##安裝telnet軟件
[root@server memcached-1.5.6]# telnet 127.0.0.1 11211 ##本地測試登錄
add username 0 0 7 ##0:不設置序列號0:不設置過期事件7:字節長度
1234567
STORED
add users 0 0 7
123
ERROR
get username ##查看
VALUE username 0 7
1234567
END
gets username ##查看
VALUE username 0 7 1 ##1:更新次數
1234567
END
##lamp結構見前博客有具體操作
##測試數據工作是否正常
[root@client php-5.6.11]# mysql -u root -pabc123 //進入數據庫
CREATE DATABASE sky; //創建一個數據庫為 sky
GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123'; //提權
flush privileges; //刷新數據庫
##修改PHP首頁
[root@client php-5.6.11]# vim /usr/local/httpd/htdocs/index.php
<?php
$link=mysql_connect('192.168.13.129','skyuser','admin123');
if($link) echo "<h2>Success!!</h2>";
else echo "Fail!!";
mysql_close();
?>
[root@client ~]# yum install autoconf -y
[root@client ~]# cd /mnt/memcached/
[root@client memcached]# tar zvxf memcache-2.2.7.tgz -C /opt/
[root@client memcached]# cd /opt/memcache-2.2.7/
[root@client memcache-2.2.7]# /usr/local/php5/bin/phpize ##增加PHP模塊生成腳本
[root@client memcache-2.2.7]# ./configure \
> --enable-memcache \ ##開啟memcache
> --with-php-config=/usr/local/php5/bin/php-config ##關聯PHP配置文件
[root@client memcache-2.2.7]# make && make install
/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/ ##共享文件位置,后面需要用到
[root@client memcache-2.2.7]# vim /usr/local/php5/php.ini ##修改php配置文件
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/" ##共享文件位置
extension = memcache.so ##指向memcache模塊
[root@client memcache-2.2.7]# vim /usr/local/httpd/htdocs/index.php
<?php
$memcache=new Memcache();
$memcache->connect('192.168.13.128',11211); ##連接Memcached服務器地址
$memcache->set('key','Memcache test Successfull!',0,60);
$result=$memcache->get('key');
unset($memcache);
echo$result;
?>
[root@client memcache-2.2.7]# service httpd stop ##重啟
[root@client memcache-2.2.7]# service httpd start
##瀏覽器訪問
add username 0 0 7
//添加數據(兩個0表示:不進行壓縮和序列化標識,數據過期時間為永不過期;標識號是7就需要輸入7位數。)
allways //輸入一個7位數
get username //查詢數據
gets username
set username 0 0 10 //更新信息,若鍵名不存在,則自行添加
everything
replace username 0 0 8 //更新信息,若鍵名不存在,則報錯
12345678
gets username //檢測更新
VALUE username 0 8 4
12345678
append username 0 0 7 //鍵值后追加數據
example
prepend username 0 0 2 //鍵值前追加數據
un
delete username //清除指定的鍵值數據
flush_all //清除所有緩存數據
OK
stats //顯示狀態信息
stats items //返回所有鍵值對的統計信息
stats cachedump 1 0 //返回指定存儲空間的鍵值對
stats slabs //顯示各個slab的信息
stats sizes //輸出所有item的大小和個數
stats reset //清空統計數據
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。