21.1-21.4 memcached介紹,安裝使用,狀態查看
21.1 什麽是NoSQL
非關系型數據庫就是NoSQL,關系型數據庫代表MySQL
對於關系型數據庫來說,是需要把數據存儲到庫、表、行、字段裏,查詢的時候根據條件一行一行地去匹配,當量非常大的時候就很耗費時間和資源,尤其是數據是需要從磁盤裏去檢索
NoSQL數據庫存儲原理非常簡單(典型的數據類型為k-v),不存在繁雜的關系鏈,比如mysql查詢的時候,需要找到對應的庫、表(通常是多個表)以及字段。
NoSQL數據可以存儲在內存裏,查詢速度非常快
NoSQL在性能表現上雖然能優於關系型數據庫,但是它並不能完全替代關系型數據庫
NoSQL因為沒有復雜的數據結構,擴展非常容易,支持分布式
常見NoSQL數據庫
k-v形式的:memcached、redis 適合儲存用戶信息,比如會話、配置文件、參數、購物車等等。這些信息一般都和ID(鍵)掛鉤,這種情景下鍵值數據庫是個很好的選擇。
文檔數據庫:mongodb 將數據以文檔的形式儲存。每個文檔都是一系列數據項的集合。每個數據項都有一個名稱與對應的值,值既可以是簡單的數據類型,如字符串、數字和日期等;也可以是復雜的類型,如有序列表和關聯對象。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數據可以使用XML、JSON或者JSONB等多種形式存儲。
列存儲 Hbase
圖 Neo4J、Infinite Graph、OrientDB
21.2 Memcached介紹
Memcached是國外社區網站LiveJournal團隊開發,目的是為了通過緩存數據庫查詢結果,減少數據庫訪問次數,從而提高動態web站點性能。
官方站點 http://www.memcached.org/
數據結構簡單(k-v),數據存放在內存裏
多線程
基於c/s架構,協議簡單 (啟動一個服務去連接memcached進行通信)
基於libevent的事件處理 (nginx也是基於libevent)
自主內存存儲處理(slab allowcation)
數據過期方式:Lazy Expiration 和 LRU
Memcached不支持重啟服務器,因為數據存儲在內存裏面,重啟服務器會導致數據丟失。
Memcached的數據流向
Slab allocation
Slab Allocation的原理
將分配的內存分割成各種尺寸的塊(chunk), 並把尺寸相同的塊分成組(chunk的集合),每個chunk集合被稱為slab。
Memcached的內存分配以Page為單位,Page默認值為1M,可以在啟動時通過-I參數來指定。
Slab是由多個Page組成的,Page按照指定大小切割成多個chunk。
Growth factor
Memcached在啟動時通過-f選項可以指定 Growth Factor因子。該值控制chunk大小的差異。默認值為1.25。
通過memcached-tool命令查看指定Memcached實例的不同slab狀態,可以看到各Item所占大小(chunk大小)差距為1.25
命令:# memcached-tool 127.0.0.1:11211 display
Memcached的數據過期方式
Lazy Expiration
Memcached 內部不會監視記錄是否過期,而是在get時查看記錄的時間戳,檢查記錄是否過期。這種技術被稱為lazy(惰性)expiration。因此,Memcached不會在過期監視上耗費CPU時間。
LRU
Memcached會優先使用已超時的記錄的空間,但即使如此,也會發生追加新記錄時空間不足的情況,此時就要使用名為Least Recently Used(LRU)機制來分配空間。顧名思義,這是刪除“最近最少使用”的記錄的機制。因此,當內存空間不足時(無法從slab class獲取到新的空間時),就從最近未被使用的記錄中搜索,並將其空間分配給新的記錄。從緩存的實用角度來看,該模型十分理想。
21.3 安裝memcached
yum install -y memcached libmemcached libevent systemctl start memcached
memcached 進程介紹
ps aux |grep memcached memcach+ 617 0.0 0.0 325564 1176 ? Ssl 17:10 0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024 root 626 0.0 0.0 112660 968 pts/0 R+ 17:10 0:00 grep --color=auto memcached
解釋:
-u 指定啟動用戶
-p 指定端口
-m 分配內存大小,單位Mb (此選項最常用)
-c 指定最大並發數
以上的參數都可以更改
修改加載參數有2種,分為手動跟自動:
1 手動 /usr/bin/memcached -u xxx -p xxx -m xxx -c xxx
2 自動,修memcached的配置文件
vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS=""
根據實際來修改
比如加上監聽的ip,可以把OPTIONS="" 改為OPTIONS="127.0.0.1"
21.4 查看memcached狀態
memcached-tool是查看memcached狀態的一款工具
memcached-tool 127.0.0.1:11211 stats #127.0.0.1:11211 Field Value accepting_conns 1 auth_cmds 0 auth_errors 0 bytes 0 bytes_read 7 bytes_written 0 cas_badval 0 cas_hits 0 cas_misses 0 cmd_flush 0 cmd_get 0 cmd_set 0 cmd_touch 0 conn_yields 0 connection_structures 11 curr_connections 10 curr_items 0 decr_hits 0 decr_misses 0 delete_hits 0 delete_misses 0 evicted_unfetched 0 evictions 0 expired_unfetched 0 get_hits 0 get_misses 0 hash_bytes 524288 hash_is_expanding 0 hash_power_level 16 incr_hits 0 incr_misses 0 libevent 2.0.21-stable limit_maxbytes 67108864 listen_disabled_num 0 pid 617 pointer_size 64 reclaimed 0 reserved_fds 20 rusage_system 0.020730 rusage_user 0.019136 threads 4 time 1530610329 total_connections 11 total_items 0 touch_hits 0 touch_misses 0 uptime 1324 version 1.4.15
關註點
get hits 命中的數量
curr_items 暫時存儲的項目數量
get hits/ curr_items=命中率
或者echo stats |nc 127.0.0.1 11211 需要安裝nc工具 yum install -y nc
echo stats |nc 127.0.0.1 11211 STAT pid 617 STAT uptime 2754 STAT time 1530611759 STAT version 1.4.15 STAT libevent 2.0.21-stable STAT pointer_size 64 STAT rusage_user 0.037363 STAT rusage_system 0.041996 STAT curr_connections 10 STAT total_connections 12 STAT connection_structures 11 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 13 STAT bytes_written 1024 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
若安裝libmemcached後,可以使用命令
memstat --servers=127.0.0.1:11211 查看memcached服務狀態
--servers 指定memcached服務器ip:port
memstat --servers=127.0.0.1:11211 Server: 127.0.0.1 (11211) pid: 617 uptime: 2787 time: 1530611792 version: 1.4.15 libevent: 2.0.21-stable pointer_size: 64 rusage_user: 0.038247 rusage_system: 0.041996 curr_connections: 10 total_connections: 13 connection_structures: 11 reserved_fds: 20 cmd_get: 0 cmd_set: 0 cmd_flush: 0 cmd_touch: 0 get_hits: 0 get_misses: 0 delete_misses: 0 delete_hits: 0 incr_misses: 0 incr_hits: 0 decr_misses: 0 decr_hits: 0 cas_misses: 0 cas_hits: 0 cas_badval: 0 touch_hits: 0 touch_misses: 0 auth_cmds: 0 auth_errors: 0 bytes_read: 30 bytes_written: 2068 limit_maxbytes: 67108864 accepting_conns: 1 listen_disabled_num: 0 threads: 4 conn_yields: 0 hash_power_level: 16 hash_bytes: 524288 hash_is_expanding: 0 bytes: 0 curr_items: 0 total_items: 0 expired_unfetched: 0 evicted_unfetched: 0 evictions: 0 reclaimed: 0
21.1-21.4 memcached介紹,安裝使用,狀態查看