資料庫緩存層如何優化
對於大型站點,如果沒有中間緩存層,當流量打入資料庫底層時,即便有之前的幾層為我們擋住一部分流量,但是在大並發的情況下,還是有大量請求湧入資料庫層,這樣對資料庫伺服器的壓力衝擊很大,響應速度也會下降,因為添加中間緩存層很有必要。
常見的緩存形式:內存緩存,文件緩存
緩存數據是為了讓客戶端很少甚至不訪問資料庫伺服器進行數據的查詢,高並發下,能最大程度的降低對資料庫伺服器的訪問壓力
用戶請求→數據查詢→連接資料庫伺服器並查詢數據→將數據緩存起來→(HTML,內存,JSON、序列化數據)→顯示
用戶再次請求→數據查詢→直接從緩存中獲取數據→顯示給客戶端
MySQL的查詢緩存
query_cache_type 查詢緩存類型,有0,1,2三個取值 0則是不使用查詢緩存,1為始終使用查詢緩存,2表示按需使用查詢緩存 為0就沒啥好說的了
當query_cache_type 為1的時候,還是可以關閉掉查詢緩存的,就是:SELECT SQL_NO_CACHE * FROM MY_TABLE WHERE condition;
當query_cache_type 為2的時候,要按需要來開啟,開啟sql為:SELECT SQL_CACHE * FROM MY_TABLE WHERE condition;
query_cache_size 默認情況下query_cache_size為0,表示為查詢緩存預留的內存為0,則無法使用查詢緩存
可以直接在my.ini(window底下,linux下是my.cnf)修改值,也可以用命令 SET GLOBAL query_cache_size = 268435456
查詢緩存可以看成是SQL文本和查詢結果的映射,當第二次查詢的sql語句和第一次查詢的sql語句完全一樣的情況下,才會使用緩存 (多一個空格都不行呢)
show STATUS LIKE "QCACHE_HITS" ; 可以查看命中次數
當表的結構和數據發生改變的時候,查詢緩存中的數據不再有效。
清理緩存 FLUSH QUERY CACHE; 可以清理查詢緩存內存碎片
RESET QUERY CACHE; 從查詢緩存中移出所有查詢
FLUSH TABLES; 關閉所有打開的表,同時該操作將會清空所有查詢緩存中的內容。
使用Memcache 緩存查詢數據
工作原理 memcache是一個高性能的分散式內存對象緩存系統,通過在內存里維護一個統一的巨大hash表,它能夠用來存儲各種格式的數據,包括圖像,視頻,文件以及資料庫檢索的結果,簡單的說就是將數據調用到內存,然後從內存中讀取,從而大大提高讀取速度。
工具流程
先檢查客戶端的請求數據是否在mamcached中,如有,直接把請求數據返回,不再對資料庫進行任何操作;如果請求的數據不在mamcached中,就去查資料庫,把從資料庫中獲取的數據返回給客戶端,同時把數據緩存一份到mamcached中。
方法
獲取get(key)
設置set(key,val,expire)
刪除delete(key)
通用緩存機制 用查詢的方法名+參數作為查詢時的key,value對中的key值
詳細可以看php的memcache拓展
或者是mamcached(支持的方法多一點)
使用redis緩存查詢數據
與memcache區別
性能相差不大
REDIS在2.0版本後增加了自己的VM特性,突破物理內存的限制,memcache可以修改最大可用內存,採用LRU演算法
redis,依賴客戶端來實現分散式讀寫
memcache本身沒有數據冗餘機制
redis支持(快照,aof),依賴快照進行持久化,aof增強了可靠性的同時,對性能有影響
memcache不支持持久化,通常做緩存,提升性能。
memcache在並發場景下,用cas保證一致性,redis事務支持比較弱,只能保證事務中的每個操作連續執行
redis支持多種類的數據類型
redis用於數據量較小的高性能操作和運算上
memcache用於動態系統中減少資料庫負載,提升性能;適合做緩存,提升性能。


※超融合獨立出現在魔力象限報告,該領域市場進入爆發期!
※黑客盯上醫療數據 信息安全需警鐘長鳴
TAG:中國存儲 |