`
goodscript
  • 浏览: 72052 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

memcached问题备忘

阅读更多
应用场景:
用户对象列表数据查询频率很高、需要把用户对象列表保存到缓存中。每次查询的时候无需再查询数据减轻数据库的压力

Memcached实现缓存列表对象:
假如列表对象很大、把整个列表对象作为一个大对象来缓存的话、每次获取的时候都要获取一个大对象、很浪费资源。
所以把列表对象分解成为多个对象来保存

缓存列表对象的步骤:
1、 封装列表对象:把用户对象ID列表缓存到列表对象中,用户对象ID指向用户对象
2、 以ID为key分别缓存用户对象保存到缓存中
3、 缓存对象经过分布式策略分别保存在不同的memcached服务中




获取用户对象列表的时候:获取用户对象ID列表、再根据ID逐个获取用户对象。
现在问题来了:
假如有一台memcached服务器down掉了。
1、 当我们根据用户对象ID列表来获取对象信息的时候可能就有一部分的对象是无法获取。
解决的方法一、根据用户对象ID打开一个数据库连接查询数据库、把对象数据补充到缓存中
好处:保证了数据的完整性、逐步恢复缓存数据
缺点:真正的应用中可能一台memcached服务里面保存有几百万甚至几千万条类似用户对象这样的对象。这样每个对象打开一次数据库连接就需要打开几百万次数据库连接甚至几千万次数据库连接。
解决方法二、当发现从缓存中获取对象列表的数据不完整、放弃缓存获取对象列表,直接从数据库获取、启动一个线程补充缓存中的用户对象
以上的解决方法都觉得不是很好、备忘一下
  • 大小: 38.1 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics