Memcached 数据缓存系统
Memcached 數據緩存系統
?
常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html
Memcached是一個自由開源的,高性能,分布式內存對象緩存系統。
Memcached是一種基于內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。
Memcached簡潔而強大。它的簡潔設計便于快速開發,減輕開發難度,解決了大數據量緩存的很多問題。它的API兼容大部分流行的開發語言。本質上,它是一個簡潔的key-value存儲系統。
一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
內存管理機制:采用slab內存動態分配機制,采用lru對象清除機制。采用hash機制快速檢索。
?
Memcached服務端的安裝:
1,安裝epel-release擴展源
2.安裝:事件觸發的網絡庫.libevent libevent-devel
3.安裝:連接memcached的工具nc(查看工具)
4.安裝memcached,libmemcached(客戶端工具包可以不按照)當然memcached也有自動工具memcached-tool,也可查看。
通過yum源安裝即可,提前按照epel擴展源
yum install -y libevent libevent-devel nc ?memcached libmemcached
查看是否安裝成功
rpm -qa libevent libevent-devel nc ?memcached libmemcached
查看命令路徑:which memcached 為:/usr/bin/memcached
啟動:/etc/init.d/memcached start
查看監聽默認端口及進程:默認端口為:11211
netstat -lnp|grep memcached
ps -ef|grep memcached|grep -v grep
lsof -i :11211
相關參數如端口等.在/etc/init.d/memcached啟動文件中或/etc/syscofig/memcached配置文件中定義。注釋:只有更改/etc/sysconfig/memcached文件才生效。
?
文件內容如下:vim /etc/syscofig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
如:更改內存大小為128M CACHESIZE="128" 重啟
[root@bogon ~]# ps -aux|grep mem
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root ???????843 ?0.0 ?0.0 ?????0 ????0 ? ???????S ???04:10 ??0:00 [vmmemctl]
496 ???????2818 ?0.0 ?0.0 330844 ??988 ? ???????Ssl ?04:51 ??0:00 memcached -d -p 11211 -u memcached -m 128?-c 1024 -P /var/run/memcached/memcached.pid
root ??????2852 ?0.0 ?0.0 103252 ??876 pts/1 ???S+ ??04:54 ??0:00 grep mem
已經生效。
Memcached啟動參數
-d 啟動一個守護進程。
-m 分配個memcache使用的內存熟路,單位是MB
-u 運行memcache的用戶,如果當前為root,需要使用此參數指定用戶。
-l 監聽的服務器ip地址。
-p 設定memcache監聽的端口,默認11211
-c 設置最大運行的并發連接數,默認為1024.
-P設置保存Memcache的pid文件 保存pid到指定文件。
默認沒有指定ip,如果設置可以在配置文件中設置OPTIONS="-l 127.0.0.1"
重啟!Ps可以查看。
?
Memcached可以同時啟動多個實例如
啟動第一個實例:memcached -m 16m -p 11211 -d -u root -c 8192
啟動第二個實例:memcached -m 16m -p 11212 -d -u root -c 8192
ps -ef|grep memcache|grep -v grep
可以加入/etc/rc.local中以便下次開機啟動tail -2 /etc/rc.local
/usr/bin/memcached -m 16m -p 11211 -d -u root -c 8192
/usr/bin/memcached -m 16m -p 11211 -d -u root -c 8192
查看運行狀態命中多少數據,查看命令nc 提前我們已經安裝過了nc
查看memcached狀態
用自帶工具查看:memcached-tool?127.0.0.1:11211 stats
查看此工具由那個包安裝的:rpm -qf `which memcached-tool` 由:memcached包安裝的。
查看比較多的有:get_hits命中了多少cmd_get總請求多少?等...通過此值可以算出命中率多少,最好不要第一百分之80.
用nc命令查看:echo stats|nc 127.0.0.1 11211?和上面顯示一致。
用:memstat --servers=127.0.0.1:11211 由libmemcached包安裝的
連接memcached進行管理 管理可用telnet ip 端口 管理也可用nc管理
新手可以按照memadmin php工具第三方軟件管理(memadmin-1.0.12.tar.gz)下載解壓后將Memadmin 移動至站點根目錄。注:必須支持php。
mv memadmin /usr/local/apache2/htdocs 下瀏覽器訪問:
新手管理還是比較方便的。呵呵。
?
Telnet 127.0.0.1 11211
添加數據:set key1 0 300 2 ?(鍵名為key,0為flags標記必須為10進制整數,300過期時間s,2表示字節。)
回車顯示STORED表示存儲成功。
查看數據:get key1
刪除數據:delete key1
替換數值:replace key1 0 300 2
退出:quit
查看memcached chunks等,占用大小:memcached-tool 127.0.0.1:11211 display。
Mysql與memcached的對比:
Mysql:insert ?memcached:set
Mysql:select ?memcached: get
Mysql:delete ?memcached:delete
Memcached的語法規則:
<command name><key><flags><exptime><bytes>\r\n<data block>\r\n\
\r\n在windows是Enter
?
緩存管理命令
stats 顯示信息同上“memcached-tool?127.0.0.1:11211 stats”
STAT pid 22459 ????????????????????????????進程ID
STAT uptime 1027046 ???????????????????????服務器運行秒數
STAT time 1273043062 ??????????????????????服務器當前unix時間戳
STAT version 1.4.4 ????????????????????????服務器版本
STAT libevent 2.0.21-stable
STAT pointer_size 64 ??????????????????????操作系統字大小(這臺服務器是64位的)
STAT rusage_user 0.040000 ?????????????????進程累計用戶時間
STAT rusage_system 0.260000 ???????????????進程累計系統時間
STAT curr_connections 10 ??????????????????當前打開連接數
STAT total_connections 82 ?????????????????曾打開的連接總數
STAT connection_structures 13 ?????????????服務器分配的連接結構數
STAT reserved_fds 20
STAT cmd_get 54 ???????????????????????????執行get命令總數
STAT cmd_set 34 ???????????????????????????執行set命令總數
STAT cmd_flush 3 ??????????????????????????指向flush_all命令總數
STAT get_hits 9 ???????????????????????????get命中次數
STAT get_misses 45 ????????????????????????get未命中次數
STAT delete_misses 5 ??????????????????????delete未命中次數
STAT delete_hits 1 ????????????????????????delete命中次數
STAT incr_misses 0 ????????????????????????incr未命中次數
STAT incr_hits 0 ??????????????????????????incr命中次數
STAT decr_misses 0 ????????????????????????decr未命中次數
STAT decr_hits 0 ??????????????????????????decr命中次數
STAT cas_misses 0 ?????????????????????????cas未命中次數
STAT cas_hits 0 ???????????????????????????cas命中次數
STAT cas_badval 0 ?????????????????????????使用擦拭次數
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 15785 ?????????????????????讀取字節總數
STAT bytes_written 15222 ??????????????????寫入字節總數
STAT limit_maxbytes 67108864 ??????????????分配的內存數(字節)
STAT accepting_conns 1 ????????????????????目前接受的鏈接數
STAT listen_disabled_num 0 ???????????????
STAT time_in_listen_disabled_us 0
STAT threads 4 ????????????????????????????線程數
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT conn_yields 0
STAT bytes 0 ??????????????????????????????存儲item字節數
STAT curr_items 0 ?????????????????????????item個數
STAT total_items 34 ???????????????????????item總數
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0 ??????????????????????????為獲取空間刪除item的總數
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
?
stats items?命令
執行stats items,可以看到STAT items行,如果memcached存儲內容很多,那么這里也會列出很多的STAT items行。
stats slabs命令
?顯示各個slab的信息,包括chunk的大小、數目、使用情況等
flush_all命令
flush_all 僅用于清理緩存中的所有名稱/值對。如果您需要將緩存重置到干凈的狀態,則 flush_all 能提供很大的用處。
PHP連接Memcached
客戶端:安裝php的memcache擴展(lamp平臺)
?memcache在php中編譯
# ?wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz
# tar zxvf memcache-2.2.3.tgz
# cd memcache-2.2.3
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make
# make install
# cp modules/memcache.so /usr/local/php/ext/ ??//把memcache.so 拷貝至php的extension_dir下,#查看php extension_dir的方法是 ?/usr/local/php/bin/php -i |grep extension_dir
修改擴展路徑
mkdir /usr/local/php/ext
在php.ini中修改:
extension_dir = "/usr/local/php/ext"
然后在php.ini 中添加
extension = memcache.so
下載測試頁面:
curl www.apelearn.com/study_v2/.memcache.txt>1.php 2>/dev/null
或者直接創建測試文件內容如下vim /usr/local/php/bin/1.php
<?php
//連接Memcache Memcache
$mem = new Memcache;
$mem->connect("192.168.1.105", 11211);
//保存數據
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br>";
//替換數據
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";
//保存數組數據
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
//刪除數據
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";
//清除所有數據
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
//關閉連接
$mem->close();
?>
切記上面的ip設置服務器端ip。
/usr/local/php/bin/php 1.php
[root@localhost bin]# /usr/local/php/bin/php 1.php
Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
????[0] => aaa
????[1] => bbb
????[2] => ccc
????[3] => ddd
)
<br>Get key1 value: <br>Get key2 value: <br>[root@localhost bin]#
出現如下結果表示ok。
或在站點根目錄下創建2.php vim /usr/local/apache2//index1.html
內容如下
<?php
$memcache = new Memcache;
$memcache->connect( '192.168.1.105', 11211 ) or die ( "Could not connect Mc server" );
$memcache->set ( 'key','wyl wyl' );
$get= $memcache->get ( 'key' );
echo $get;
?>
瀏覽器測試:出現wyl wyl 表示ok。
?
?
?
Memcached實現session共享
?
在php配置中分為lamp和lnmp 兩者的配置是不一樣的。在客戶端lamp或者lnmpphp配置文件中修改php文件如下:
第一種:修改php配置文件
session.save_handler = files
session.save_path = "/tmp" 為--》
session.save_handler = memcache
session.save_path = "tcp://192.168.1.105:11211"
ip 端口改為memcache服務器ip端口地址即可。在apache 或nginx 站點目錄新建測試的php文件
vim /usr/local/apache2/htdocs/index3.php
內容隨便這里依然用以前的測試文件。
第二種:針對apache修改httpd.conf中對應的虛擬主機匯總添加
php_value session.save_handler “memcache”
php_value session.save_path “tcp://192.168.1.11211”
第三種:正對php 在php-fpm.conf中對應的pool中添加
php_value[session.save_handler]=memcache
php_value[session.save_path] = “tcp://192.168.1.105:11211”
?
測試1.可在站點配置文件下編寫info.php文件
<?php
phpinfo();
?>
保存退出。
curl 192.168.1.220 info.php 用curl 篩選或瀏覽器訪問:
| session.referer_check | no value | no value |
| session.save_handler | memcache | memcache |
| session.save_path | tcp://192.168.1.105:11211 | tcp://192.168.1.105:11211 |
| session.serialize_handler | php | php |
| session.upload_progress.cleanup | On | On |
有session.save_handler和_path顯示數據表示ok
?
測試2.命令測試:
在站點文件下創建文件session.php文件
<?php
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST3'];
print "<br><br>";
print session_id();
?>
寫入測試內容
[root@localhost htdocs]# telnet 192.168.1.105 11211
Trying 192.168.1.105...
Connected to 192.168.1.105.
Escape character is '^]'.
flush_all
OK
[root@localhost ~]# curl 192.168.1.220/session.php
1479421282<br><br>1479421282<br><br>0onfdgvsgvpuev63k5qn74e993
[root@localhost htdocs]# telnet 192.168.1.105 11211
Trying 192.168.1.105...
Connected to 192.168.1.105.
Escape character is '^]'.
flush_all
OK
get 0onfdgvsgvpuev63k5qn74e993
VALUE 0onfdgvsgvpuev63k5qn74e993 0 37
TEST|i:1479421282;TEST3|i:1479421282;
END
Memcached sesson共享存儲ok
?
Memcached 兼容持久化
MemcachedBD(key-value)
Tokyo tyrant(key-value)
持久化軟件如:redis,ttserver
轉載于:https://www.cnblogs.com/wylhome/p/6076218.html
總結
以上是生活随笔為你收集整理的Memcached 数据缓存系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实验九——基本数据类型存储及应用总结
- 下一篇: 分布式代码管理系统GIT