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

歡迎訪問 生活随笔!

生活随笔

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

数据库

memcached mysql缓存_memcached做数据库缓存

發布時間:2023/12/4 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 memcached mysql缓存_memcached做数据库缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近研究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",{'results':results})

#直接從memcache取數據

else:

results?=?mc.get(key2)

print?"go?memcache!!!"

return?render_to_response("sql.html",{'results':results})

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

{常規做法有兩種:1.數據有改變則在更新數據庫的同時更新memcache2.數據有改變則數據庫有一個字段來標識更新時間,例如update_time。當有查詢時候,把memcache里的update_time與數據庫的update_time比較。如果發生變化則更新memcache超期時間設置,應根據數據訪問的頻繁度和內存大小來權衡一下。memcache內存申請后,映像中不會被釋放。它是通過?如果有一部分數據超時,則新寫入的數據覆蓋超時數據來完成重復使用的。那么理論上來講,內存使用情況是數據被memcache占用最多的那一刻!}

---實驗用的第一種。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數據

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

key2?=?'select?*?from?zuoze'

key3?=?md5(key2)

cursor.execute(key2)

results?=?cursor.fetchall()

mc.set(key3,results)

db.close()

return?HttpResponse('ok!')

return?render_to_response("upsql.html")

總結

以上是生活随笔為你收集整理的memcached mysql缓存_memcached做数据库缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

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