国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

為什么不能用memcached存儲Session

2019-11-06 06:32:39
字體:
供稿:網(wǎng)友

為什么不能用memcached存儲session

轉(zhuǎn)自:http://mp.weixin.QQ.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=202805903&idx=2&sn=94d0c60d0f86672aac527b658b7e1bcd#rd

Memcached創(chuàng)建者Dormando很早就寫過兩篇文章[1][2],告誡開發(fā)人員不要用memcached存儲Session。他在第一篇文章中給出的理由大致是說,如果用memcached存儲Session,那么當(dāng)memcached集群發(fā)生故障(比如內(nèi)存溢出)或者維護(比如升級、增加或減少服務(wù)器)時,用戶會無法登錄,或者被踢掉線。而在第二篇文章中,他則指出,memcached的回收機制可能會導(dǎo)致用戶無緣無故地掉線。

Titas Norkūnas是DevOps咨詢服務(wù)提供商Bear Mountain的聯(lián)合創(chuàng)始人。由于看到Ruby/Rails社區(qū)忽略了Dormando那兩篇文章所指出的問題,所以他近日撰文對此進行了進一步的闡述。他認(rèn)為問題的根本在于,memcached是一個設(shè)計用于緩存數(shù)據(jù)而不是存儲數(shù)據(jù)的系統(tǒng),因此不應(yīng)該用于存儲Session。

對于Dormando的那兩篇文章,他認(rèn)為第一篇文章給出的原因很容易理解,而人們經(jīng)常會對第二篇文章給出的原因認(rèn)識不足。因此他對這個原因進行了詳細(xì)地闡述:

Memcached使用“最近最少使用(LRU)”算法回收緩存。但memcached的LRU算法針對每個slab類執(zhí)行,而不是針對整體。

這意味著,如果所有Session的大小大致相同,那么它們會分成兩三個slab類。所有其它大小大致相同的數(shù)據(jù)也會放入同一些slab,與Session爭用存儲空間。一旦slab滿了,即使更大的slab中還有空間,數(shù)據(jù)也會被回收,而不是放入更大的slab中……在特定的slab中,Session最老的用戶將會掉線。用戶將會開始隨機掉線,而最糟糕的是,你很可能甚至都不會注意到它,直至用戶開始抱怨……

另外,Norkūnas提到,如果Session中增加了新數(shù)據(jù),那么Session變大也可能會導(dǎo)致掉線問題出現(xiàn)。

有人提出將Session和其它數(shù)據(jù)分別使用單獨的memcached緩存。不過,由于memcached的LRU算法是局部的,那種方式不僅導(dǎo)致內(nèi)存使用率不高,而且也無法消除用戶因為Session回收而出現(xiàn)隨機掉線的風(fēng)險。

如果讀者非常希望借助memcached提高Session讀取速度,那么可以借鑒Norkūnas提出的memcached+RDBMS(在有些情況下,NoSQL也可以)的模式:

當(dāng)用戶登錄時,將Session “set”到memcached,并寫入數(shù)據(jù)庫;

在Session中增加一個字段,標(biāo)識Session最后寫入數(shù)據(jù)庫的時間;

每個頁面加載的時候,優(yōu)先從memcached讀取Session,其次從數(shù)據(jù)庫讀??;

每加載N頁或者Y分鐘后,再次將Session寫入數(shù)據(jù)庫;

從數(shù)據(jù)庫中獲取過期Session,優(yōu)先從memcached中獲取最新數(shù)據(jù)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 思茅市| 安平县| 高清| 津南区| 望都县| 手机| 积石山| 新安县| 肃北| 和林格尔县| 全南县| 溧阳市| 新竹市| 靖宇县| 民和| 永靖县| 神农架林区| 双峰县| 铅山县| 隆德县| 平舆县| 甘德县| 溧水县| 芒康县| 海城市| 江都市| 乳山市| 濉溪县| 南京市| 久治县| 上思县| 高雄市| 江油市| 兴仁县| 贵溪市| 卢龙县| 阿巴嘎旗| 蒙山县| 定远县| 高阳县| 个旧市|