memcache

 

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

(0)
yywyyw
上一篇 2016-11-01 10:16
下一篇 2016-11-01 10:18

相關推薦

  • varnish原理及配置事例

    Varnish是一款高性能的開源HTTP加速器(其實就是帶緩存的反向代理服務),可以把http響應內容緩存到內存或文件中,從而提高web服務器響應速度。與傳統的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等諸多優點,很多大型的網站都開始嘗試使用 varnish 來替換 squid,這些都促進 varnish 迅速發展起來 Varn…

    Linux干貨 2015-12-06
  • 第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題 vim總結:     模式:編輯模式                 插入模式                 末行模式  …

    Linux干貨 2017-02-06
  • Linux用戶和組管理

      用戶和組管理類命令的使用方法 Liunx用戶組管理命令: groupadd命令:添加組     命令用法:         groupadd [選項] group_name   &nbs…

    Linux干貨 2016-11-25
  • Linux之iptables原理詳解

    目錄: 一、netfilter與iptables 二、filter、nat、mangle等規則表 三、INPUT、FORWARD等規則鏈和規則 四、Linux數據包路由原理 五、iptables編寫規則  一、netfilter與iptables (1)Netfilter是由Rusty Russell提出的Linux 2.4內核防火墻框架,該框架既…

    2017-08-04
  • 178linux博客寫作技巧

    為什么要寫博客 為什么要寫在178linux上 如何注冊178linux 178linux的文章提審規則 178linux寫文章的技巧 markdown 語法 為什么要寫博客 寫博客的好處不言而喻,也不做過多解釋,眼過千遍不如手過一遍。知識的吸收需要很長的過程,這個過程越艱難越我們對知識的吸收程度也越好。對于找工作也有好處,側面是自己工作能力的證明,大量學員…

    Linux干貨 2016-09-06
  • linux系統的路由功能

    1、概要    大家應該都明白,不同網段的報文包傳播,是需要路由的轉發轉發功能的,那么,一個linux操作系統能不能充當路由器呢?下面不妨來驗證一下。 2、網絡拓撲 3、實現過程    <1>倆個centos6分別充當Router1和Router2。并添加足夠的網卡。    <2&…

    Linux干貨 2016-09-06
欧美性久久久久