1. 程式人生 > >快取Memcached以及快取策略

快取Memcached以及快取策略

1.什麼是memcached

快取是一種常駐與記憶體的記憶體資料庫,記憶體的讀取速度遠遠快於程式在磁碟讀取資料的速度。我們在設計程式的時候常常會考慮使用快取,將經常訪問的資料放到記憶體上面這樣可以提高訪問資料的速度,同時可以降低磁碟或資料庫的壓力。
memcached就是一款可以方便實現快取的工具軟體,memcached的優勢在於以下幾點:
1.實現分散式快取(支援熱部署),通過hashcode根據快取伺服器ip智慧分配將資料快取到的伺服器上。
2.實現最近最少訪問的資料優先被移除快取。
3.快速找到適配的儲存空間,避免記憶體的浪費。
4.使用鍵值對儲存資料,方便讀取修改等快取的管理。
5.socket通訊,快取伺服器和應用伺服器分離。
等等,memcached還含有很多自身的優勢。
使用快取中我們面臨的快取資料無法同步的問題:比如一臺快取伺服器突然崩潰那麼這臺伺服器上面的快取資料就會全部丟失,而且需要在配置中及時去除這臺崩潰的伺服器IP,這個需要我們編寫更多的程式碼進行相應的控制。

2.memcached內部機制

memcached為了提高資料的儲存速度,在安裝啟動memcached服務的時候,他會自動將分配給memcached的記憶體分隔為大小不一致的很多塊。每當任意一個大小的需要快取的資料提交過來的時候memcached將會自動找到符合這個資料大小最適合的記憶體塊,然後把資料放到這個塊裡面。這種方式不僅可以降低記憶體的浪費同時可以減少了記憶體分配的時間了。
如果memcached裡面的記憶體已經被使用完了,還需要向裡面新增資料的時候,memcached將會把存入快取中最長時間沒有用的資料清除掉。
每次向快取中新增資料的時候都會帶上該資料的有效時間,如果超過了這個有效時間那麼快取的資料自動失效了。
memcached安裝到計算機上是一款服務預設埠11211,我們可以通過socket與他建立通訊。建立起通訊之後就可以通過執行memcached的指令向快取裡面新增取出或修改或刪除快取資料的工作了。

3.C#如何操作memcached

C#建立memcached連線,首先通過socket建立於11211的通訊,建立socketpool,然後通過socket發起遠端命令的執行語句,在這裡使用socket建立連線就需要設定每一次連線建立的最大時間,如果不設定最大時間,那麼在建立某一個連線的時候發生了異常,那麼機器就會長時間處於等待知道連線超時異常丟擲。
使用了執行緒池和進行Socket的連結。然後通過Socket進行相應的連結操作。
其實memcached作為一種服務,他可以被不同語言不同平臺建立連線並執行命令。

4.memcached內部操作指令和名詞解釋

所有語言建立連線到memcached服務之後,要管理memcached都執行的是同一套的指令集合。

在Windows系統中我們可以使用telnet命令來檢視Memcached的相關執行情況如:
stats  telnet xxx.xxx.xxx.xxx 11211
輸入stats命令:在這裡螢幕是空白,看不到輸入的內容,回車之後可以看到Memcached的執行相關資訊。
set key 
get key 
memcached客戶機命令
set
Add
replace
get
delete
輸入stats命令:在這裡螢幕是空白,看不到輸入的內容,回車之後可以看到Memcached的執行相關資訊。
查看出來的結果名詞的意思:
Pid: Memcached伺服器中的程序編號 Uptime:Memcached伺服器啟動之後所經歷的時間,單位秒 Time:當前系統時間,單位秒 Version: Memcached的版本號 pointer_size:伺服器所在主機作業系統的指標大小,一般為32或64 curr_items:表示當前快取中存放的所有快取物件的數量 total_items:表示從memcached服務啟動到當前時間,系統儲存過的所有物件的數量,包括已經刪除的物件 bytes:表示系統儲存快取物件所使用的儲存空間,單位為位元組 curr_connections:表示當前系統開啟的連線數 total_connections:表示從memcached服務啟動到當前時間,系統開啟過的連線的總數 cmd_get:查詢快取的次數,即使不成功也算一次 cmd_set:儲存資料的次數,當然這裡只儲存成功的次數 get_hits:表示獲取資料成功的次數。 get_misses:表示獲取資料失敗的次數。 evictions:為了給新的資料專案釋放空間,從快取移除的快取物件的數目。比如超過快取大小時根據LRU演算法移除的物件,以及過期的物件 bytes_read:memcached伺服器從網路讀取的總的位元組數 bytes_written:memcached伺服器傳送到網路的總的位元組數 limit_maxbytes:memcached服務快取允許使用的最大位元組數 threads:被請求的工作執行緒的總數量 快取命中率 = get_hits / cmd_get * 100% ;

5.良好的快取

良好的快取需要具備以下幾點:
1.靈活指定不同型別的快取時間。
2.可以通過配置檔案或管理站點對快取的配置和管理。
3.靈活做到對不同使用者的快取進行管理。
4.快取伺服器應該穩定,並能及時備份快取資料。
5.靈活的對快取的資料進行管理。
這裡以我接觸過的良好的快取策略,是將快取的配置填寫到一個xml或則json配置檔案裡面。
比如:
<?xml version='1.0' encoding='utf-8'?>
 <Root>
     <Item>
          <CacheTime>10000</CacheTime>
          <DataType>B2C</DataType>
          <Enabled>True</Enabled>
     </Item>
     <Item>
          <CacheTime>10000</CacheTime>
          <DataType>PHONE</DataType>
          <Enabled>True</Enabled>
      </Item>
 </Root>
上面的一個配置就能很好的指定摸一個型別的快取時間配置,然後還能啟用或停用某一種型別是否進行快取。
還可以把這個xml配置更加複雜以滿足對不同使用者的快取時間其實也是不一樣的。 在快取的開發完成之後,對快取的管理要做到靈活多樣。因為在運維過程中常常需要新增或刪除或修改某一些快取的內容所以做到靈活易管理是非常的重要的。

6.快取的擴充套件

快取的我們已經瞭解了一些了,那麼在平時開發中我們可以那些地方使用快取呢?首先使用者經常讀取的資料可以放入到快取之中。其次使用者高頻寫入的資料也可以通過快取在又換速度。最後網站的一些靜態檔案內容也可以放入。
使用者高頻寫入資料庫的資料放入快取的方式,如果使用者每一次寫入資料庫都需要與資料庫建立連線,並將資料寫入到資料庫勢必降低整個執行效率,那麼我們就需要降低與資料庫建立連線並寫入磁碟的次數,所以可以規定一個快取內容的大小,如果快取到得資料達到某一個數量級就一次性的將資料寫入到資料庫,或則定時將快取中的資料取出然後一併寫入資料庫。我覺得以上兩種方式可以結合起來使用可以降低程式與資料庫建立連線寫入磁碟所開銷的資源。
其他的快取服務軟體有redis。非常出色以下幾個方面:
1.Redis中,並不是所有的資料都一直儲存在記憶體中的,這是和Memcached相比一個最大的區別。 2.Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,hash等資料結構的儲存。 3.Redis支援資料的備份,即master-slave模式的資料備份。 4.Redis支援資料的持久化,可以將記憶體中的資料保持在磁碟中,重啟的時候可以再次載入進行使用。 我個人認為最本質的不同是Redis在很多方面具備資料庫的特徵,或者說就是一個數據庫系統,而Memcached只是簡單的K/V快取

相關推薦

快取Memcached以及快取策略

1.什麼是memcached 快取是一種常駐與記憶體的記憶體資料庫,記憶體的讀取速度遠遠快於程式在磁碟讀取資料的速度。我們在設計程式的時候常常會考慮使用快取,將經常訪問的資料放到記憶體上面這樣可以提高訪問資料的速度,同時可以降低磁碟或資料庫的壓力。 memcached就

老司機帶你玩轉面試(2):Redis 過期策略以及快取雪崩、擊穿、穿透

![](https://cdn.geekdigging.com/Interview/mianshi_header_1.jpg) ## 前文回顧 建議前一篇文章沒看過的同學先看下前面的文章: [「老司機帶你玩轉面試(1):快取中介軟體 Redis 基礎知識以及資料持久化」](https://www.gee

快取Memcached 與 Redis 相同點差異點分析

memcach簡介 Memcache時一個記憶體物件快取系統,用於加速動態web應用程式,減輕資料庫負載。它可以應對任意多個連線,使用非阻塞的網路I/O,工作機制:在記憶體中開闢一塊空間,然後建立一個hash表,memcached自管理這些hash表 工作原理 Memcached基於健值對儲存,key會

MyBatis 本地快取和二級快取使用以及原始碼分析 第一篇

本地快取    也稱為一級快取,分為兩個作用域SESSION和STATEMENT。官網中的描述:MyBatis利用本地快取機制(Local Cache)防止迴圈引用(迴圈引用)和加速重複巢狀查詢。預設值為SESSION,這種情況下會快取一個會話中執行的所有查詢。若設定值為ST

用SpringAOP結合MemCached快取的設想

方案一: 給DAO的方法上加SpringAOP的Around通知,決定資料從資料庫獲得還是從快取獲得。 自定義一個@MemEntity,對此Dao所有按主鍵和唯一鍵查詢進行快取。 規則:查詢的方法名getByField 更新updateByField&

MyBatis 本地快取和二級快取使用以及原始碼分析 第二篇

                                         本篇分析

瀏覽器快取原理以及本地儲存

作為一名前端工作人員,前端的快取知識是必須掌握的,因為一個網站開啟網頁的速度直接關係到使用者體驗,使用者粘度,而提高網頁的開啟速度有很多方面需要優化,其中比較重要的一點就是利用好快取,快取檔案可以重複利用,還可以減少頻寬,降低網路負荷。   IIS7.COM網站整站下載網站映象1、可

Memcached資料庫快取

Memcached 一、Memcached簡介 Memcached是一個開源的,支援高效能,高併發的分散式記憶體快取系統,由C語言編寫,總共2000多行程式碼。從軟體名稱上看,前3個字元“Mem”就是記憶體的意思,而接下來的後面5個字元“cache”就是快取的意思,最後一個字元d,是daemon的意

快取受益/ 成本/ 更新策略 / 穿透/ 無底洞/

1.快取的受益與成本 受益: 1)加速讀寫 2)降低後端負載 後端伺服器通過前端快取降低負載,業務端使用Redis降低後端MySQL負載 成本 1)資料不一致:緩衝層和資料層有時間視窗不一致,和更新策略有關。 2)程式碼維護成本:多了一層快取邏輯 3)運維成本

企業專案開發--分散式快取memcached(3)

此文已由作者趙計剛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 3.3、ssmm0-data 結構: 3.3.1、pom.xml  1 <?xml version="1.0" encoding="UTF-8"?> &nb

瀏覽器快取資料以及刪除快取資料(localstorage的用法)

//初始化介面 $(function(){ if (localStorage.hasOwnProperty("data")) { //判讀是否有data的屬性,有就疊加 var json = JSON.parse(localStorage.getItem("data")); //轉

Asp.Net Core 輕鬆學-在.Net Core 使用快取和配置依賴策略

前言     幾乎在所有的應用程式中,快取都是一個永恆的話題,恰當的使用快取可以有效提高應用程式的效能;在某些業務場景下,使用快取依賴會有很好的體驗;在 Asp.Net Core 中,支援了多種快取元件,這其中最基礎也最易用的當屬 IMemoryCache,該介面表示其儲存依賴於託管程式伺服器的記憶體,下面

實現PHP伺服器+Android客戶端(Retrofit+RxJava)第三天Retrofit的配置以及快取的實現

上一篇講了介面,這篇文章就要講客戶端網路請求部分的內容了,主要用到的就是Retrofit+RxJava,其實準確來說是Retrofit+RxJava+OkHttp, 最新的Retrofit是2.0.2版本,原始碼地址:retrofit 學習retrofit:

網路傳輸中的三張表,MAC地址表、ARP快取以及路由表

一:MAC地址表詳解   說到MAC地址表,就不得不說一下交換機的工作原理了,因為交換機是根據MAC地址錶轉發資料幀的。在交換機中有一張記錄著區域網主機MAC地址與交換機介面的對應關係的表,交換機就是根據這張表負責將資料幀傳輸到指定的主機上的。   交換機的工作原理   交換機在接收到資料幀以後,首先、

24、你一般是如何應對快取雪崩以及穿透問題的?

1、面試題 瞭解什麼是redis的雪崩和穿透?redis崩潰之後會怎麼樣?系統該如何應對這種情況?如何處理redis的穿透? 2、面試官心裡分析 其實這是問到快取必問的,因為快取雪崩和穿透,那是快取最大的兩個問題,要麼不出現,一旦出現就是致命性的問題。所以面試官一定會問你。 3、面試

mybatis 一對多,多對多等關係xml檔案中sql的寫法以及快取、延遲載入的配置寫法

高階功能https://blog.csdn.net/dfsaggsd/article/details/50555583 對映關係 一對一對映 SQL語句:使用者訂單查詢 SELECT  orders.*,   USER.username,  

Jeesite增加spring-data-redis快取功能以及相關配置

由於經常使用了Jeesite來開發專案,所以針對Jeesite使用的相關技術架構還是比較瞭解的,由於Jeesite有一定的侷限性,所以在平常工作中優化了他的一些程式碼。這次主要優化了兩點,簡單說明如下: 1.Jeesite專案以前使用Ehcache來儲存Session,

Glide 快取策略 記憶體快取和磁碟快取

本文主要介紹瞭如何配置和管理Glide中的快取,其中大部分內容都可以直接在官方Wiki中找到,這裡只是進行了整理和彙總。言歸正傳,Glide支援圖片的二級快取(並不是三級快取,因為從網路載入並不屬於快取),即記憶體快取和磁碟快取。 磁碟快取 一般的圖片快取指的就是磁碟快取

第五篇 :微信公眾平臺開發實戰Java版之如何獲取公眾號的access_token以及快取access_token

一、access_token簡介 為了使第三方開發者能夠為使用者提供更多更有價值的個性化服務,微信公眾平臺 開放了許多介面,包括自定義選單介面、客服介面、獲取使用者資訊介面、使用者分組介面、群發介面等, 開發者在呼叫這些介面時,都需要傳入一個相同的引數 access_token,它是公眾賬號的全域性唯一票

快取穿透、快取併發、快取失效說明及對應處理策略

我們在用快取的時候,不管是Redis或者Memcached,基本上會通用遇到以下三個問題: 快取穿透快取併發快取失效 一、快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個存在