memcached问题备忘

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

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

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

[img]http://dl.iteye.com/upload/attachment/546840/2f2cdf18-a996-31cc-ae6a-e60c5eb52279.jpg[/img]


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值