memcached:
memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
最初的目的是用來加速動態頁面訪問,減少緩解數據庫壓力,主要生產場景用來緩存mysql的查詢結果。
緩存服務器:
緩存:cache,無持久存儲功能;所有數據都保存在內存中,斷電即丟失 bypass緩存--旁掛式緩存 只能性一般依賴于服務端,一半依賴于客戶端 k/v cache,僅支持存儲流式化數據; 單個緩存項大小不能大于1M,支持池流失化數據。 key和value都放在內存中。key放在hash表中 LiveJournal旗下的Danga Interactive研發,
特性:
k/v cache:僅可序列化數據;存儲項:k/v;存儲于內存中
智能性一半依賴于客戶端(調用memcached的API開發程序),一半依賴于服務端;
運作方式,客戶端(例如php)先找memcache查找緩存中是否有其想要的數據,有則直接讀?。ň彺婷校?,沒有則去真實的服務端請求數據,請求到數據后,自己將請求結果緩存到memcache。
分布式緩存:互不通信的分布式集群;負載均衡需要客戶端自己實現。(需要程序員自己實現)
分布式系統請求路由方法:取模法,一致性哈希算法; key的哈希值除以服務的數量取模,0就是第一臺,1就是第二臺...但是取模法會出現雪崩效應。其中一臺故障,但是客戶端根據算法還是會調度到該服務器上。
建議使用一致性哈希算法
hash環
算法復雜度:O(1)
執行效率非常高
清理過期緩存項:
緩存耗盡:LRU ,最近最少使用算法,主動清理 緩存項過期:惰性清理機制,不刪除,直接覆蓋
安裝配置:
有兩個版本centos6都可以安裝 memcache memcached centos7只能按裝這個 由CentOS 7 base倉庫直接提供: 監聽的端口: 11211/tcp, 11211/udp tcp更可靠,udp效率更高效 主程序:/usr/bin/memcached 配置文件:/etc/sysconfig/memcached #環境配置定義的變量,啟動腳本中要調用。 [root@localhost html]# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="" # 使用memcached [options]
Unit File:memcached.service
[root@localhost html]# cat /usr/lib/systemd/system/memcached.service [Unit] Description=Memcached Before=httpd.service After=network.target [Service] Type=simple EnvironmentFile=-/etc/sysconfig/memcached ##調用環境文件 ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS ###調用變量 [Install] WantedBy=multi-user.target
協議格式:memcached協議
文本格式 使用Telnet就可以控制 二進制格式
memcache配置文件 centos7為列
[root@localhost html]# rpm -ql memcached /etc/sysconfig/memcached #memcache的運行環境 /usr/bin/memcached /usr/bin/memcached-tool /usr/lib/systemd/system/memcached.service #服務啟動腳本 /usr/share/doc/memcached-1.4.15 /usr/share/doc/memcached-1.4.15/AUTHORS /usr/share/doc/memcached-1.4.15/CONTRIBUTORS /usr/share/doc/memcached-1.4.15/COPYING /usr/share/doc/memcached-1.4.15/ChangeLog /usr/share/doc/memcached-1.4.15/NEWS /usr/share/doc/memcached-1.4.15/README.md /usr/share/doc/memcached-1.4.15/protocol.txt /usr/share/doc/memcached-1.4.15/readme.txt /usr/share/doc/memcached-1.4.15/threads.txt /usr/share/man/man1/memcached-tool.1.gz /usr/share/man/man1/memcached.1.gz
命令:
命令格式:
統計類:stats, stats items, stats slabs, stats sizes 存儲類:set, add, replace, append, prepend 命令格式:<command name> <key> <flags> <exptime> <bytes> <cas unique> 檢索類:get, delete, incr/decr(自增自減) 清空:flush_all 示例: telnet> add KEY <flags> <expiretime> <bytes> \r #最后敲回車 telnet> VALUE
exptime 過期時間
memcached程序的常用選項:
memcached [options]
-m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes. 緩存空間大小,默認64MB -c <num>:Use <num> max simultaneous connections; the default is 1024. 用戶的最大連接數 -u <username>: 以指定的用戶身份來運行進程; -l <ip_addr>: 監聽的IP地址,默認為本機所有地址; -p <num>:監聽的TCP端口, the default is port 11211. -U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off. 0表示關閉此功能 -M:內存耗盡時,不執行LRU清理緩存,而是拒絕存入新的緩存項,直到有多余的空間可用時為止; -f <factor>:增長因子;默認是1.25;內存的空間分配因子 創建chunk的粒度,粒度過于粗糙浪費空間。根據實際情況調整。 -t <threads>:啟動的用于響應用戶請求的線程數;
使用Telnet連接使用文本格式的協議
[root@localhost ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stats STAT pid 5051 #主進程的pid號 STAT uptime 13419 STAT time 1477675842 STAT version 1.4.15 STAT libevent 2.0.21-stable STAT pointer_size 64 STAT rusage_user 0.144034 STAT rusage_system 1.049062 STAT curr_connections 10 STAT total_connections 743 STAT connection_structures 12 STAT reserved_fds 20 STAT cmd_get 0 STAT cmd_set 0 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 0 STAT get_misses 0 STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT touch_hits 0 STAT touch_misses 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 10270 STAT bytes_written 756593 STAT limit_maxbytes 67108864 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT hash_power_level 16 STAT hash_bytes 524288 STAT hash_is_expanding 0 STAT bytes 0 STAT curr_items 0 STAT total_items 0 STAT expired_unfetched 0 STAT evicted_unfetched 0 STAT evictions 0 STAT reclaimed 0 END
memcache也是使用事件驅動機制,開啟的線程數最好不要超過cpu核心數
memcached默認沒有認證機制,可借用于SASL進行認證;
SASL:Simple Authentication Secure Layer #可以基于pam或mysql認證
API:
php-pecl-memcache #php的API接口擴展模塊 php-pecl-memcached #PHP的API接口擴展模塊 python-memcached #python的API接口擴展模塊 libmemcached #工具 libmemcached-devel #開發庫 命令行工具: memcached-tool SERVER:PORT COMMAND memcached-tool - stats and management tool for memcached
圖形界面工具: phpmemcacheadmin
安裝 yum install httpd php php-pecl-memcached memcached
將管理頁面放到httpd的虛擬主機目錄。php通過API會調用一些系統調用。selinux會阻止,禁用selinux。目錄的屬主。啟動httpd服務,啟動memcached 即可運行。
進入首頁先配置根據裝的是memcached還是memcache選擇API接口。如果服務啟動沒有問題。訪問status頁面能看到memcache的狀態。
注意:memcache的使用場景,有場景適合使用更為專業的redis,但是如果本機安裝一個memcache就能解決大問題。也就沒必要使用redis。
nginx也支持memcache有相關模塊 ngxhttpmemcached_module
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/56558