您好,登錄后才能下訂單哦!
Memcache
Memcache的作用網上資料都講的很好,說簡單點就是減輕讀取數據庫的壓力,原理也很簡單:
被請求的數據會先到memcache里去取,如果沒有就去數據庫里取,順便給memcache帶一份。
每次更新數據也先更新memcache里的數據,如果沒有則更新數據庫,同時更新memcache。
因此需要注意的是這個數據是易失去性存儲的。
模式和端口
Memcache是一個基于C/S的結構:
服務端:使用Memcached軟件
客戶端:使用Memcache插件 (這個插件是結合后端語言比如php python java)
服務端口:11211(可改)
軟件清單:
libevent依賴庫 http://www.libevent.org/
memcache插件 http://pecl.php.net/package/memcache/
memcached服務 http://www.memcached.org/
lamp環境 yum -y install httpd php php-mysql mysql-server
操作系統 CentOS-6.5(x86_64)
1.將上傳相關軟件包,安裝lamp環境
yum -y install httpd php php-mysql mysql-server /etc/init.d/httpd start echo "<?php phpinfo()?>" > /var/www/html/index.php
然后用瀏覽器訪問查看php信息,在信息里面是找不到memcache的
2.安裝libevent插件
tar xf libevent-2.0.22-stable.tar.gz cd libevent-2.0.22-stable ./configure --prefix=/usr/local/libevent && make && make install
3.安裝memcached服務端
tar xf memcached-1.4.36.tar.gz cd memcached-1.4.36 ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ make && make install
安裝好后會在/usr/local/memcached/bin/目錄下生成memcached
4.配置環境變量
cd /etc/profile.d/ vim mem.sh export PATH="/usr/local/memcached/bin:$PATH" #寫入profile文件開機自動導入 memcached -m 32 -p 11211 -d -c 8192 -u root #m分出內存大小 p 端口 d 混合模式 c 最大連接數 netstat -anptu | grep memcached #查看是否啟動,運行多實例更改端口即可 free -m #可以看到內存越來越少,因為被分配出去了 ps -aux | grep memcached #查看進程pid是多少 kill -9 1234 #關閉memcached服務 pkill memcached #同上
5.memcached使用
yum -y install nc telnet
1)使用nc命令連接memcache
printf "set first 0 30 5\r\nmmmmm\r\n" | nc 127.0.0.1 11211 #存數據 (字段分別為 key,標志,效期,長度,值 ) printf "get first\r\n" | nc 127.0.0.1 11211 #取數據
2)使用telnet命令連接memcache
telnet 127.0.0.1 11211 #然后就可以使用相關的memcached命令了
6.下面是關于memcached相關的操作命令
add key1 0 30 3 #添加數據30為效期(如果寫0表示永不過期) 3為大小
set key1 0 30 3 #更新數據,不存在會自動創建
replace key1 0 30 3 #更新數據,不存在會報錯
delete key1 #刪除數據
get key1 #獲取數據
gets key 1 #獲取更多信息
stats setting #查看配置信息
stats slabs #查看slab
stats items #查看item
stats size #查看大小
7.安裝memcache客戶端php插件
安裝phpize命令可以為php添加新模塊
如果不知道是什么包可以使用 yum provides */phpize
yum -y install php-devel tar xf memcache-2.2.7.tgz cd memcache-2.2.7 phpize #打模塊,生成configure等文件 which php-config #查看php-config路徑位置 ./configure --enable-memcache --with-php-config=/usr/bin/php-config make && make install
安裝號后模塊會被安裝置/usr/lib64/php/modules/memcache.so
cd /etc/php.d/ cp mysql.ini memcache.ini #vim進行編輯將extension的值設置成memcache.so
重啟服務后可以看到php已經支持了memcache模塊了
8.后面可以結合php網站測試數據庫相關
tar xf memcache_page.tar.gz -C /var/www/html/ cd !$
測試頁面有 mysql_connect.php 編輯一下
因此需要先把mysql的用戶設置一下
/etc/init.d/mysqld start mysql_secure_installation
或者自己在數據庫里
grant all on *.* to 'root'@'127.0.0.1' identified by '123456' flush privileges
然后瀏覽器訪問mysql_connect.php
對接成功
這里可以閱讀read.php和write.php了解memcache的讀寫原理
read.php
<?php$memcachehost = '192.168.1.113';$memcacheport = 11211;$memcachelife = 60; #memcache默認有效期$memcache = new Memcache;$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); #連接memcache服務器$num=$_POST["num"];$db=db1;$tb=T1;$query="select * from $tb where ID=$num"; #mysql查詢語句#$key=md5($query);$key=md5($num); #對參數進行加密,可以看出memcache存儲的值是進過加密的if(!$memcache->get($key)) #嘗試先從memcache取值,如果沒有去數據庫取,順便給memcache來一份{ $conn=mysql_connect("127.0.0.1","root","123456"); mysql_select_db($db); $result=mysql_query($query);# echo "mysql $num"; while ($row=mysql_fetch_assoc($result)) { $arr[]=$row; } $f = 'mysql'; $memcache->add($key,serialize($arr),0,30); $data = $arr ; }else{ $f = 'memcache'; $data_mem=$memcache->get($key); $data = unserialize($data_mem); }echo "$f $num";echo "key is $key";echo "<br>";?>
write.php
<?php$memcachehost = '192.168.1.113';$memcacheport = 11211;$memcachelife = 60;$memcache = new Memcache;$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");$num=$_POST["num"];$db=db1;$tb=T1;$query="insert into $tb values($num)";#$key=md5($query);$key=md5($num);if(!$memcache->get($key)) //先嘗試更新memcache,如果不存在,則再去更新數據庫,同時更新存儲到memcachce{ $conn=mysql_connect("127.0.0.1","root","123456"); mysql_select_db($db); $result=mysql_query($query); while ($row=mysql_fetch_assoc($result)) { $arr[]=$row; } $f = 'mysql'; $memcache->add($key,serialize($arr),0,30); //mysql 插入成功后,插入 memcached $data = $arr ;#}#else{ $f1 = 'memcache'; $data_mem=$memcache->get($key); $data = unserialize($data_mem); }echo "$f $f1 $num";echo "<br>";?>
關于php memcache簡單用法參見http://www.cnblogs.com/demonxian3/p/6868361.html
上面兩個php里可以看到調用了數據庫的db1 和 表T1因此需要創建一下
seq 1 999 > /tmp/sum #創建1-999的測試數據
連接數據庫導入數據
create database db1; create T1(id int)engine=innodb; load data infile '/tmp/sum' into table T1; #導入測試數據
科普一下:使用history查看歷史命令,輸入!+數字可以執行編號的那條命令
!111
用瀏覽器來訪問那個測試頁面
測試讀取數據,從數據庫里查詢出id為5的值
后退再去取一次
測試寫入數據
最后給大家推薦一款很好用的memcache管理工具:memadmin php寫的
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。