日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用Memcache缓存mysql数据库操作的原理和缓存过程浅析

發布時間:2024/8/26 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.首先明確是不是一定要上緩存,當前架構的瓶頸在哪里,若瓶頸真是數據庫操作上,再繼續往下看。

2.明確memcached和redis的區別,到底要使用哪個。前者終究是個緩存,不可能永久保存數據(LRU機制),支持分布式,后者除了緩存的同時也支持把數據持久化到磁盤等,redis要自己去實現分布式緩存(貌似最新版本的已集成),自己去實現一致性hash。因為不知道你們的應用場景,不好說一定要用memcache還是redis,說不定用mongodb會更好,比如在存儲日志方面。

3.緩存量大但又不常變化的數據,比如評論。

4.你的思路是對的,清晰明了,讀DB前,先讀緩存,如果有直接返回,如果沒有再讀DB,然后寫入緩存層并返回。

5.考慮是否需要主從,讀寫分離,考慮是否分布式部署,考慮是否后續水平伸縮。

6.想要一勞永逸,后續維護和擴展方便,那就將現有的代碼架構優化,按你說的替換數據庫組件需要改動大量代碼,說明當前架構存在問題。可以利用現有的一些框架,比如SpringMVC,將你的應用層和業務層和數據庫層解耦。再上緩存之前把這些做好。

7.把讀取緩存等操作做成服務組件,對業務層提供服務,業務層對應用層提供服務。

8.保留原始數據庫組件,優化成服務組件,方便后續業務層靈活調用緩存或者是數據庫。


9.不建議一次性全量上緩存,最開始不動核心業務,可以將邊緣業務先換成緩存組件,一步步換至核心業務。
10. 刷新內存,以memcached為例,新增,修改和刪除操作,一般采用lazy load的策略,即新增時只寫入數據庫,并不會馬上更新Memcached,而是等到再次讀取時才會加載到Memcached中,修改和刪除操作也是更新 數據庫,然后將Memcached中的數據標記為失效,等待下次讀取時再加載。


對于大型網站如facebook,ebay等網站,如果沒有Memcache做為中間緩存層,數據訪問不可能吃得消,對于一般網站,只要具備獨立的服務器,完全可以通過配置Memcache提高網站訪問速度和減少數據庫壓力,這里主要討論一下Memcache和MySQL數據庫交互過程的流程關系,了解Memcache的中間緩存層作用,從而深入了解Memcache機制原理。

Memcache和MySQL交互流程圖

如上圖,傳統的查詢方法是直接查詢數據庫,數據庫將結果返回給查詢語句,而當有Memcache中間緩存層時,查詢的是Memcache緩存數據,下面詳細了解Memcache各類數據操作原理:

1. 查詢數據(select),首先通過指定的Key查詢(get)Memcache中間緩存層數據,如果存在相對應數據,則直接獲取出數據結果,查詢過程完全不需要查詢數據庫。如果不存在,則查詢MySQL數據庫,并以key對應value的形式將查詢結果存儲在Memcache緩存數據中,然后將結果返回給查詢語句。
2. 更新數據(update),首先更新數據,然后刪除相關的memcache數據(delete)。
3. 增加數據(add),首先刪除相關緩存數據,然后增加數據。
4. 刪除數據(delete),刪除數據,并刪除Memcache數據。

對MySQL的數據操作,主要涉及到的Memcache方法如下:

1. 獲取:get(key)
2. 設置:set(key, value [, expiry])
3. 刪除:delete(key [, time])

實例:
假設一個貼子,獲取貼子ID為2009的值,其Memcache與MySQL交互流程如下:

復制代碼代碼如下:
$key = ‘biuuu_thread_';//key前綴
$cachetime = 100;//緩存有效時間(秒)
$id = 2009;

Memcache基本操作過程

1. 查詢:$result = get($key.$id);如果$result為空,則查詢MySQL數據庫,然后set($key.$id,$value,0,$cachetime)
2. 更新:delete($key.$id);
3. 增加:delete($key.$id);
4. 刪除:delete($key.$id);

通過直觀圖和實例應該對Memcache與MySQL的交互有一個基礎的掌握,其實對于應用來說,基本上就已經足夠,但如果要涉及到命名空間等相對復雜的情況,Memcache的操作方式會有所不同,但不管什么樣的操作,還是離不開基礎操作命令,由于這是Memcache基礎篇,主要是討論Memcache和mysql交互操作流程,當Memcache原理清楚以后,Memcache基本操作就是這么簡單。


前提:較少變更的數據才適合做緩存

緩存讀取流程:

1、先到緩存中查數據
2、緩存中不存在則到實際數據源中取,取出來后放入緩存
3、下次再來取同樣信息時則可直接從緩存中獲取

緩存更新流程:
1、更新數據庫
2、使緩存過期或失效,這樣會促使下次查詢數據時在緩存中查不到而重新從數據庫去一次。

通用緩存機制:
1、用查詢的方法名+參數作為查詢時的key value對中的key值
2、向memcache或redis之類的nosql數據庫(或者內存hashmap)插入數據
3、取數據時也用方法名+參數作為key向緩存數據源獲取信息





與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的使用Memcache缓存mysql数据库操作的原理和缓存过程浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。