1. 程式人生 > >memcached的安裝啟動(僅介紹安裝和啟動)

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資料匯出和應用請看我後續筆記內容