《Hadoop生态》——第二章 数据库与数据管理——Memcached

Memcached


这里写图片描述

许可证: Revised BSD License
活跃度:
目的: 内存缓存
官方地址: http://memcached.org
Hadoop集成: 无集成

你完全有可能遇到这种情景,你需要在很短的时间内访问大量的数据。例如,假设你想要给你的客户发送一封邮件,并期望他们能够了解你在你产品中添加的新特征,但是你也需要是一些你这个月已经联系过但是不包含在内的人。

这个方法就是你通过查询一个非常大的联系人列表分布在很多机器上,在一个非常大的数据系统中查询,然后加载这个月联系过的人整个列表到每台机器的内存,并且在这个列表中快速检查你联系过的每个联系人。在MapReduce中,这通常称为“复制连接”。但是假设你已经有了非常庞大的一个联系网,这个联系网包含数以百万计的email地址,这些地址都是在交易演出,产品演示或者社交媒体上收集来的,而且你与这些人联系也是相当频繁。这就意味着你这个月已经联系过的人的列表是相当大的,而且整个列表在每天机器上的可用内存可能就不够用了。

你真正需要的就是将你所有机器的内存都连在一起形成池子,并且让每个人都在这个大池子中操作。Memcached就是这么一个工具让你建立一个分布式内存池。为了遵守前面的例子,你需要将已经发过邮件的人的整个列表都放在这个分布式内存池中,并且通知虽有不同的机器处理完整联系列表都是到这个内存池中,而不是本地内存。

教程链接

spymemcached项目有很多例子,在wiki上有它的API。

示例代码

假设需要跟踪哪个评论者评论了哪部电影,所以我们不会让一个评论人对同一部电影评论两次。因为没有单独的,官方支持Memcached的Java客户端,我们用比较流行的spymemcached客户端。

我们定义一个客户端并将它指到我们的Memcached服务器:

MemcachedClient client = new MemcachedClient(AddrUtil.getAddresses("server1:11211 server2:11211"));

现在开始加载数据到缓存。我们用流行的OpenCSV库读评论文件并把我们找到的每个<评论人,题目>对写一个实体到缓存中。

CSVReader reader = new CSVReader(new FileReader("reviews.csv"));
String [] line;
while ((line = reader.readNext()) != null) {
    //Merge the reviewer name and the movie title
    //into a single value (ie: KevinDune)
    //that we'll use as a key
    String reviewerAndTitle = line[0] + line[1];
    //Write the key to our cache and store it for 30 minutes
    //(188 seconds)
    client.set(reviewerAndTitle, 1800, true);
}

一旦数据都加载到缓存中,我们就可以很快地用MapReduce或者其他Java代码来价差缓存:

Object myObject=client.get(aKey);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值