[toc]php
非關係型數據庫就是NoSQL,python
關係型數據庫表明MySQLmysql
對於關係型數據庫來講,是須要把數據存儲到庫、表、行、字段裏,++查詢的時候根據條件一行一行地去匹配++,當量很是大的時候就很耗費時間和資源,尤爲是數據是須要從磁盤裏去檢索web
NoSQL數據庫存儲原理很是簡單(典型的數據類型爲k-v),不存在繁雜的關係鏈,好比mysql查詢的時候,須要找到對應的庫、表(一般是多個表)以及字段。redis
NoSQL數據能夠存儲在內存裏,查詢速度很是快sql
NoSQL在性能表現上雖然能優於關係型數據庫,可是它並不能徹底替代關係型數據庫mongodb
例如京東或者淘寶這些大型電商平臺,有着很龐大的數據結構體系,有用戶表,商品表,用戶信息,商品信息,等當產生一個訂單的時候,或者查詢數據,是哪一個用戶,在什麼時間,購買了哪些商品,當調取一個用戶在某個時間買了什麼東西的時候這些數據是存在必定的關聯的。數據庫
NoSQL的存在就是不須要這些錯綜複雜的理念,一個key對應一個value。例如一個用戶下對應着他的採購訂單。且數據所有存在閃存中。不須要再次從磁盤中調取。vim
可是++NoSQL是不能夠替代Mysql獨立存在的++。緩存
例如現實運維環境中,咱們一臺WEB安裝了一個Discuz,隨着訪問量的增長,數據庫扛不住那麼大的壓力;怎麼辦呢?咱們設置一個NoSQL,當用戶讀取完畢後會直接放在NoSQL中,當用戶再次讀取的時候,會直接從緩存中讀取,不須要再次從數據庫中讀取。帖子的ID就相似於Key,帖子的內容就相似於Value。
NoSQL由於沒有複雜的數據結構,擴展很是容易,支持分佈式。因此擴展也比較容易。若是你的A服務器受到瓶頸,增長服務器讓讓其繼續緩存唄,由於不像關係型數據庫須要互相關聯,NoSQL直接橫向擴展便可!
適合儲存用戶信息,好比會話、配置文件、參數、購物車等等。這些信息通常都和ID(鍵)掛鉤,這種情景下鍵值數據庫是個很好的選擇。
將數據以文檔的形式儲存。每一個文檔都是一系列數據項的集合。每一個數據項都有一個名稱與對應的值,值既能夠是簡單的數據類型,如字符串、數字和日期等;也能夠是複雜的類型,若有序列表和關聯對象。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性能夠是不一樣的,數據可使用XML、JSON或者JSONB等多種形式存儲。
通常使用目的是,經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態web應用的速度、提升可擴展性!
正常的做業流程是:
用戶發起請求給NGINX,而後再次調用PHP,PHP和mysql打交道,當用戶PHP獲取到請求轉給NGINX,NGINX再次把請求數據交給用戶。
若是併發量很大,請求mysql的隊列比較多,這時候咱們就須要增長一個緩存層Memcached。這樣訪問過的數據所有丟在緩存中,當再次請求這個數據的時候就直接從Memcached讀取便可!
將分配的內存分割成各類尺寸的塊(chunk), 並把尺寸相同的塊分紅組(chunk的集合),每一個chunk集合被稱爲slab。
Memcached的內存分配以Page爲單位,Page默認值爲1M,能夠在啓動時經過-I 參數來指定。
Memcached在啓動時經過-f選項能夠指定 Growth Factor因子。該值控制chunk大小的差別。默認值爲1.25。
命令:
Memcached 內部不會監視記錄是否過時,而是在get時查看記錄的時間戳,檢查記錄是否過時。這種技術被稱爲lazy(惰性)expiration。所以,Memcached不會在過時監視上耗費CPU時間。
Memcached會優先使用已超時的記錄的空間,但即便如此,也會發生追加新記錄時空間不足的狀況,此時就要使用名爲Least Recently Used(LRU)機制來分配空間。顧名思義,這是刪除「最近最少使用」的記錄的機制。所以,當內存空間不足時(沒法從slab class獲取到新的空間時),就從最近未被使用的記錄中搜索,並將其空間分配給新的記錄。從緩存的實用角度來看,該模型十分理想。
查看下memcached的版本號
[root@xaviyunserver ~]# yum list |grep memcache Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast collectd-memcachec.x86_64 5.8.0-3.el7 epel dmlite-plugins-memcache.x86_64 0.8.8-1.el7 epel 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 pcp-pmda-memcache.x86_64 3.11.8-7.el7 base php-ZendFramework-Cache-Backend-Libmemcached.noarch php-pecl-memcache.x86_64 3.0.8-4.el7 base php-pecl-memcached.x86_64 2.2.0-1.el7 epel python-memcached.noarch 1.48-4.el7 base rubygem-memcache-client.noarch 1.8.5-13.el7 epel uwsgi-router-memcached.x86_64 2.0.16-1.el7 epel
[root@xaviyunserver ~]# yum install -y memcached [root@xaviyunserver ~]# systemctl start memcached
查看安裝信息:
[root@xaviyunserver ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:11211 0.0.0.0:* [root@xaviyunserver ~]# ps aux |grep memcache memcach+ 3223 0.0 0.0 325564 1180 ? Ssl 21:50 0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024 root 3230 0.0 0.0 112660 964 pts/0 R+ 21:51 0:00 grep --color=auto memcache
/usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
vim /etc/sysconfig/memcached
[root@xaviyunserver ~]# 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 3223 pointer_size 64 reclaimed 0 reserved_fds 20 rusage_system 0.011338 rusage_user 0.027654 threads 4 time 1527171113 total_connections 11 total_items 0
方法一:
memcached-tool 127.0.0.1:11211 stats 或
方法二:
yum install -y nc echo stats |nc 127.0.0.1 11211
安裝nc,yum install -y nc
查看nc的安裝源
[root@xaviyunserver ~]# rpm -qf `which nc` nmap-ncat-6.40-13.el7.x86_64
方法三:
安裝libmemcached後,可使用命令
yum install -y libmemcachedmemstat --servers=127.0.0.1:11211以上三種查看memcached服務狀態。