永发信息网

有人用memcached出过这种问题么

答案:1  悬赏:40  手机版
解决时间 2021-03-29 07:06
有人用memcached出过这种问题么
最佳答案
Memcached创建者Dormando很早就写过两篇文章[1][2],告诫开发人员不要用memcached存储Session。他在第一篇文章中给出的理由大致是说,如果用memcached存储Session,那么当memcached集群发生故障(比如内存溢出)或者维护(比如升级、增加或减少服务器)时,用户会无法登录,或者被踢掉线。而在第二篇文章中,他则指出,memcached的回收机制可能会导致用户无缘无故地掉线。   Titas Norkūnas是DevOps咨询服务提供商Bear Mountain的联合创始人。由于看到Ruby/Rails社区忽略了Dormando那两篇文章所指出的问题,所以他近日撰文对此进行了进一步的阐述。他认为问题的根本在于,memcached是一个设计用于缓存数据而不是存储数据的系统,因此不应该用于存储Session。   对于Dormando的那两篇文章,他认为第一篇文章给出的原因很容易理解,而人们经常会对第二篇文章给出的原因认识不足。因此他对这个原因进行了详细地阐述:   Memcached使用逗最近最少使用(LRU)地算法回收缓存。但memcached的LRU算法针对每个slab类执行,而不是针对整体。   这意味着,如果所有Session的大小大致相同,那么它们会分成两三个slab类。所有其它大小大致相同的数据也会放入同一些slab,与Session争用存储空间。一旦slab满了,即使更大的slab中还有空间,数据也会被回收,而不是放入更大的slab中……在特定的slab中,Session最老的用户将会掉线。用户将会开始随机掉线,而最糟糕的是,你很可能甚至都不会注意到它,直至用户开始抱怨……   另外,Norkūnas提到,如果Session中增加了新数据,那么Session变大也可能会导致掉线问题出现。   有人提出将Session和其它数据分别使用单独的memcached缓存。不过,由于memcached的LRU算法是局部的,那种方式不仅导致内存使用率不高,而且也无法消除用户因为Session回收而出现随机掉线的风险。   如果读者非常希望借助memcached提高Session读取速度,那么可以借鉴Norkūnas提出的memcached+RDBMS(在有些情况下,NoSQL也可以)的模式:   当用户登录时,将Session 逗set地到memcached,并写入数据库;   在Session中增加一个字段,标识Session最后写入数据库的时间;   每个页面加载的时候,优先从memcached读取Session,其次从数据库读取;   每加载N页或者Y分钟后,再次将Session写入数据库;   从数据库中获取过期Session,优先从memcached中获取最新数据。   关于memcached的更多信息,可以查看这里[3]。   感谢郭蕾对本文的审校。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
变频器单相220v输入. 如果调频后,输出电压是
暗黑二单机如何复制物品?
在餐厅里过年客人给你红包你该怎么办
"择其善者而从之"中的"从"是什么意思
蚂蟥在身上轻拍或用什么东西让其下落
两天才听说奶震这个词,不知道怎么才能刺激奶
原盏燕窝是什么意思?
什么是磁饱和现象
你的家庭对你的职业规划有何影响?
CoCo都可(百瑞景店)的法式奶霜红茶好不好吃
城镇居民女56岁从没买过社保有什么办法吗
汉初时期人口稀缺如何快速恢复
我想养加菲猫,不是太懂,不知道这只可以吗?
不能退出microsoft excel
在宝象金融上投资得用多少钱?
推荐资讯
SAP中如何控制采购申请转为采购订单数量不超
梦见用饭票在职工食堂打饭
单选题Susanistheverygirl________thegood
So difficultit to acquire a large vocabula
硝石可以制冰吗?在哪里可以买到硝石?网上可
男友喝多了,说让我以后吵架不许说分手,不愿
第一次月经来了之前有什么征兆?
山车阿胶是什么物质做成的。?
在哪里能贷款
爱穿短裙的四川姑娘,你以为穿上打底裤就不会
21+19+24和32+17+31中哪两个数能使这两个算式
凉拌薄荷的做法怎么做
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?