memcached做資料庫快取的原理

2021-08-08 09:51:51 字數 2326 閱讀 8279

安裝篇請參考

最近研究memcache小有成果,把經驗分享出來。

白話:很早就聽說memcache了,一直沒搞懂,後來又看到redis很火,可以用來做快取,研究了半天也沒搞懂咋個做快取,後來也不糾結了,繼續學習python,當對python基礎有一定掌握後,漸漸明白如何用redis或memcache做資料庫的快取。原理很簡單,memcache和redis都是在記憶體開闢一堆空間,用鍵-》值來儲存資料,在python稱作字典,具體流程如此圖

當使用者第一次通過web應用程式,去讀取資料庫,返回資料值的時候,web應用伺服器會做兩個動作,第乙個動作,返回給使用者,第二個動作會寫入memcache,當第二個使用者去訪問相同的資料時,程式**前新增if判斷語句,如果memcache有需要的資料,直接從memcache取。

可能表達的還不夠清楚,我們通過**來測試下。我用的環境是python+django

----查詢**

def sql(request):

#連線memcache

mc = memcache.client(['127.0.0.1:1111'])

#用sql查詢語句作為memcahe的鍵

key2 = 'select * from zuoze'

key2 = md5(key2)

#資料庫查詢zuoze表的資料

sql1 = "select * from zuoze"

#判斷sql鍵有沒有在memcache,就從mysql取資料,並寫入memcache

if not mc.get(key2):

#import mysqldb

#連線mysql資料庫

db = mysqldb.connect('127.0.0.1','admin','wanwan','t')

cursor = db.cursor()

cursor.execute(sql1)

#繫結sql資料到變數results

results = cursor.fetchall()

#同時把sql查詢資料,寫入memcache

mc.set(key2,results)

print "go mysql!!"

db.close()

return render_to_response("sql.html",)

#直接從memcache取資料

else:

results = mc.get(key2)

print "go memcache!!!"

return render_to_response("sql.html",)

--更新快取的兩種辦法,轉至論壇高手的回答:

---實驗用的第一種。

def upsql(request):

if request.method == 'post':

xing = request.post.get('xing',none)

name = request.post.get('name',none)

mail = request.post.get('email',none)

shuji_id = request.post.get('mail',none)

db = mysqldb.connect('127.0.0.1','admin','wanwan','t')

cursor = db.cursor()

sql = "insert into zuoze(id,xing,name,email,shuji_id) values ('','%s','%s','%s','%s')" % (xing,name,mail,shuji_id)

cursor.execute(sql)

db.commit()

#插入資料或更新資料後,重新更新memcache資料

本文出自 「

自動運維」 部落格,請務必保留此出處

用memcached做實時分頁快取

用memcached做分頁快取,可能很多人會覺得麻煩而不用。因為在增加 修改 刪除的過程中,你不知道會影響到哪些資料,而如果把所有分頁相關的資料快取都刪除並重新生成一遍,實現又很麻煩,甚至不可行,所以乾脆就用mysql直接分頁,簡單方便,但是這樣效能卻也下降了。本章就講乙個簡單的實現用memcach...

mysql資料庫如何做快取 MySql資料庫快取

對mysql查詢快取及sql server過程快取的理解及總結 一 mysql的query cache 1 query cache mysql query cache是用來快取我們所執行的select語句以及該語句的結果集。mysql在實現query cache的具體技術細節上類似典型的kv儲存,就...

資料庫快取

用資料庫 將要儲存的nsarray 或 nsdictionary 物件 轉為nsdata型別。再將nsdata存到資料庫的blob中。若將nsarray直接存到資料庫 那麼資料庫中儲存的是 nsstring型別的資料而不是nsarray物件本身,因此要轉為nsdata型別。方法如下 將oc物件轉為n...