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時會自動安裝上

[root@localhost ~]# 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     
[root@localhost ~]# rpm -qa libevent
libevent-2.0.21-4.el7.x86_64
[root@localhost ~]# 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最大產生進程數量

[root@localhost ~]# 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來查看參數幫助

[root@localhost ~]# vim /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

查看memcached的工作狀態

使用memcached自帶工具查看運行狀態
curr_time是緩存的項目數,get_hits是查詢的命中數,使用命中數除以項目數可以得出memcached的命中率

[root@localhost ~]# 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命令

[root@localhost ~]# 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存儲和查詢的數量相關狀態信息

[root@localhost ~]# 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的運行狀態信息

[root@localhost ~]# 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數據導出和應用請看我後續筆記內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章