memcached的安裝啟動(僅介紹安裝和啟動)
什麼是NoSQL
非關係型資料庫就是NoSQL ,關係型資料庫代表MySQL
對於關係型資料庫來說,是需要把資料儲存到庫、表、行、欄位裡,查詢的時候根據條件一行行地去匹配 ,當量非常 大的時候就很耗費時間和資源,尤其是資料是需要從磁盤裡去檢索
NoSQL資料庫儲存原理非常簡單(典型的資料型別為k-v ),不存在繁雜的關係鏈,比如mysq查詢的時候,需要找到對應的庫、表(通常是多個表)以及欄位。
NoSQL資料是可以儲存在記憶體裡,從記憶體中查詢資料速度會非常快
NoSQL在效能表現上雖然能優於關係型資料庫,但是它並不能完全替代關係型資料庫
NoSQL因為沒有複雜的資料結構,擴充套件非常容易,支援分散式
k-v形式的: memcached、t redis適合儲存使用者資訊,比如會話、配置檔案、引數、購物車等等。這些資訊一般都和ID(鍵)掛鉤,這種情景下鍵值資料庫是個很好的選擇。。
文件資料庫: mongodb 將資料以文件的形式儲存。每個文件都是一系列資料項的集合。每個資料項都有一個名稱與對應的值,值既可以是簡單的資料型別, 如字串、數字和日期等;也可以是複雜的型別,如有序列表和關聯物件。資料儲存的最小單位是文件,同一個表中儲存的文件屬性可以是不同的,資料可以使用XML、JSON或者JSONB等多種形式儲存。
列儲存 Hbase
圖Neo4J、 Infinite Graph、OrientDB
memcached介紹
memcached對資料查詢結果進行快取,減少對關係型資料庫訪問,加速資料請求結果的反饋響應
資料存放在記憶體中,因為資料是存在記憶體當中的,如果一旦關機或斷電等意外操作,會造成資料丟失,為了避免這種情況發生。需要對memcachd的資料做持久化儲存,將資料存入磁碟
多執行緒服務處理請求,多cpu的伺服器架構處理資料會很快
memcached基於c/s架構,協議簡單。由一個客戶端來連結服務端來儲存資料
memcached基於libevent的事件處理(nginx也是基於libevent方式的)
libevent事件處理,自主記憶體儲存處理(slab allocation)
Slab Allocation原理
將分配的記憶體分割成各種尺寸的塊(chunk),並把尺寸相同的塊分成組(chunk的集合),每個chunk集合被稱為slab
Memcached的記憶體分配以Page為單位,Page預設值為1MB,可以在啟動時通過-I引數來指定
Slab是由多個Page組成,Page按照指定大小切割成多個chunk
Griwth factor(增長因子)指定控制chunk的大小差異,在啟動時使用-f來指定。預設值為1.25
資料過期方式
Lazy Expiration
Memcached內部不會監視記錄是否過期,而是在get時檢視記錄的時間戳,檢查記錄是否過期。這種技術被稱為lazy (惰性) expiration。 因此,Memcached不會在過期監視上耗費CPU時間。
LRU
Memcached會優先使用已超時的記錄的空間, 但即使如此,也會發生追加新記錄時空間不足的情況,此時就要使用名為LeastRecentlyUsed (LRU)機制來分配空間。顧名思義,這是刪除“最近最少使用”的記錄的機制。因此,當記憶體空間不足時( 無法從slab class獲取到新的空間時),就從最近未被使用的記錄中搜索,並將其空間分配給新的記錄。從快取的實用角度來看,這是非常理想的儲存方式。
資料流請求關係
使用者第一次請求會直接訪問資料庫內容,memcached同時快取這次請求的結果,當用戶下次訪問請求時,再次使用該資料memcached會直接從快取中向客戶端傳送結果
安裝memcached
memcached我們可以使用yum來進行安裝,如果需要使用更新的版本功能則需要官網下載編譯安裝包來安裝
memcached依賴libevent這個依賴包,如果沒有安裝可以主動安裝或在安裝memcached時會自動安裝上
[[email protected] ~]# yum list |grep memcached
libmemcached.i686 1.0.16-5.el7 base
libmemcached.x86_64 1.0.16-5.el7 base
libmemcached-devel.i686 1.0.16-5.el7 base
libmemcached-devel.x86_64 1.0.16-5.el7 base
memcached.x86_64 1.4.15-10.el7_3.1 base
memcached-devel.i686 1.4.15-10.el7_3.1 base
memcached-devel.x86_64 1.4.15-10.el7_3.1 base
opensips-memcached.x86_64 1.10.5-3.el7 epel
php-ZendFramework-Cache-Backend-Libmemcached.noarch
php-pecl-memcached.x86_64 2.2.0-1.el7 epel
python-memcached.noarch 1.48-4.el7 base
uwsgi-router-memcached.x86_64 2.0.17.1-1.el7 epel
[[email protected] ~]# rpm -qa libevent
libevent-2.0.21-4.el7.x86_64
[[email protected] ~]# yum install -y memcached
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 4.8 kB 00:00:00
epel | 3.2 kB 00:00:00
extras
省略-------------------
Running transaction
Installing : memcached-1.4.15-10.el7_3.1.x86_64 1/1
Verifying : memcached-1.4.15-10.el7_3.1.x86_64 1/1
Installed:
memcached.x86_64 0:1.4.15-10.el7_3.1
Complete!
定義memcached的啟動配置引數
可以在memcached啟動時來指定引數,可以在啟動時指定這些配置。
檢視memcached的程序,並瞭解memcached啟動資訊
-u是指定執行服務的使用者,-p是監聽的埠,-m預分配記憶體大小,-c最大產生程序數量
[[email protected] ~]# ps -aux |grep memcached
memcach+ 28555 0.0 0.0 344084 1672 ? Ssl 16:39 0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
另一種方式指定memcached的啟動引數配置,需要編輯/etc/sysconfig/memcached這個配置檔案
PORT指定監聽埠
USER指定執行使用者
MAXCONN指定最大程序數
CACHESIZE指定啟動時分配的記憶體使用量大小
OPTIONS指定主機,可以在啟動時使用-I選項指定監聽ip,更多選項可以使用memcached -h來檢視引數幫助
[[email protected] ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
檢視memcached的工作狀態
使用memcached自帶工具檢視執行狀態
curr_time是快取的專案數,get_hits是查詢的命中數,使用命中數除以專案數可以得出memcached的命中率
[[email protected] ~]# 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 28555
pointer_size 64
reclaimed 0
reserved_fds 20
rusage_system 0.018183
rusage_user 0.036366
threads 4
time 1538989698
total_connections 11
total_items 0
touch_hits 0
touch_misses 0
uptime 1759
version 1.4.15
使用nc命令來檢視memcached服務狀態
nc命令預設不會安裝在系統中,需要我們進行yum安裝,nc命令的包名為nmap-ncat
安裝nc命令
[[email protected] ~]# yum install nmap-ncat
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* epel: mirrors.tuna.tsinghua.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package nmap-ncat.x86_64 2:6.40-13.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
----------------------------省略
Running transaction
Installing : 2:nmap-ncat-6.40-13.el7.x86_64 1/1
Verifying : 2:nmap-ncat-6.40-13.el7.x86_64 1/1
Installed:
nmap-ncat.x86_64 2:6.40-13.el7
Complete!
使用echo過濾出nc的stats狀態的輸出內容
使用nc命令我們也可以查找出memcached儲存和查詢的數量相關狀態資訊
[[email protected] ~]# echo stats |nc 127.0.0.1 11211
STAT pid 28555
STAT uptime 2144
STAT time 1538990083
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.043580
STAT rusage_system 0.021790
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 1026
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
使用memstat命令工具檢視memcached的狀態資訊
使用memstat命令需要安裝一個安裝包才能正常使用,安裝包名為libmamcached,若安裝了則不需要再次進行安裝(安裝memcached時已經安裝過了的)
使用memstat命令也可以檢視到memcached的執行狀態資訊
[[email protected] ~]# memstat --servers=127.0.0.1:11211
Server: 127.0.0.1 (11211)
pid: 28555
uptime: 2522
time: 1538990461
version: 1.4.15
libevent: 2.0.21-stable
pointer_size: 64
rusage_user: 0.053708
rusage_system: 0.021790
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: 2072
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
memcached資料匯出和應用請看我後續筆記內容