当前位置:  开发笔记 > 编程语言 > 正文

memcached的替代品,可以持久存储到磁盘

如何解决《memcached的替代品,可以持久存储到磁盘》经验,为你挑选了4个好方法。

我目前正在使用memcached和我的java应用程序,总的来说它工作得很好.

对我来说最重要的memcached的功能是:

它很快,因为读取和写入都在内存中而不会触及磁盘

它只是一个键/值存储(因为这是我所有的应用程序需求)

它是分布式的

它通过让每个对象只在一台服务器上运行来有效地使用内存

它不假设对象来自数据库(因为我的对象不是数据库对象)

但是,有一件事我想做,memcached无法做到.我想定期(可能每天一次)将缓存内容保存到磁盘.我希望能够从保存的磁盘映像中恢复缓存.

磁盘保存不需要非常复杂.如果在保存期间添加了新的键/值,我不在乎它是否包含在保存中.如果在保存发生时修改了现有的键/值,则保存的值应该是旧值或新值,但我不关心哪一个.

任何人都可以推荐另一种缓存解决方案(免费或商业),它具有对我很重要的所有(或很大一部分)memcached功能,并且还允许从磁盘保存和恢复整个缓存?



1> Pascal MARTI..:

我从未尝试过,但redis怎么样?
它的主页说(引用):

Redis是一个键值数据库.它与memcached类似,但数据集不是易失性的,值可以是字符串,与memcached完全相同,但也包含对push/pop元素进行原子操作的列表和集合.

为了非常快速但同时持久化整个数据集在内存中并且不时地和/或当对数据集进行多次改变时,它被异步写入磁盘上.您可能丢失了许多应用程序中可接受的最后几个查询,但它与内存DB一样快(Redis支持非阻塞主从复制,以便通过冗余解决此问题).

它似乎回答了你所谈到的一些观点,所以也许它可能对你有帮助吗?

如果你试试,我对你发现的东西很感兴趣,顺便说一下;-)


作为旁注:如果你需要将所有这些写入磁盘,也许缓存系统并不是你真正需要的......毕竟,如果你使用memcached作为缓存,你应该能够重新填充它-amand,只要有必要 - 我承认,如果整个memcached集群立即崩溃,可能会出现一些性能问题......

那么,也许一些"更多"的键/值存储软件可能会有所帮助?比如像CouchDB这样的东西?
它可能没有memcached那么快,因为数据不存储在RAM中,而是存储在磁盘上,尽管......



2> realMarkusSc..:

也许你的问题就像我的:我只有几台机器用于memcached,但有很多内存.即使其中一个发生故障或需要重新启动,它也会严重影响系统的性能.根据最初的memcached哲学,我应该添加更多的内存更少的机器,但这不是成本效率,而不是"绿色IT";)

对于我们的解决方案,我们为Cache系统构建了一个接口层,使得底层缓存系统的提供者可以嵌套,就像您可以使用流一样,并为memcached编写缓存提供程序以及我们自己非常简单的Key-Value -2磁盘存储提供商.然后我们为缓存项定义权重,表示如果无法从缓存中检索项目,则重建项目的成本是多少.嵌套磁盘缓存仅用于权重高于特定阈值的项目,可能约为所有项目的10%.

在缓存中存储对象时,我们不会浪费时间,因为保存到一个或两个缓存无论如何都会排队等待异步执行.因此写入磁盘缓存不需要很快.读取相同:首先我们选择memcached,只有当它不存在并且它是一个"昂贵"的对象时,我们检查磁盘缓存(比memcached慢一点,但仍然比重新计算30 GB更好)单台机器出现故障后的数据).

通过这种方式,我们可以从两个世界中获得最佳效果,而无需用新的东西替换memcached.



3> skaffman..:

EhCache具有"磁盘持久性"模式,该模式在关闭时将缓存内容转储到磁盘,并在重新启动时重新启动数据.至于您的其他要求,当在分布式模式下运行时,它会跨所有节点复制数据,而不是仅将它们存储在一个节点上.除此之外,它应该很好地满足您的需求.它还处于活跃开发阶段,许多其他java缓存框架都没有.


Fault-Tolerant Persistence磁盘使用仅限企业,需要许可证.

4> valyala..:

试试go-memcached - 用Go编写的memcache服务器.它将缓存的数据保持在开箱即用的磁盘上.Go-memcached与memcache客户端兼容.它在原始memcached中缺少以下功能:

缓存数据可在服务器崩溃和/或重新启动后继续存在.

高速缓存大小可能超过可用RAM大小多个数量级.

密钥大小没有250字节限制.

值大小没有1Mb限制.值大小实际上受到2Gb的限制.

它比原来的memcached更快.它在服务传入请求时也使用较少的CPU.

以下是通过go-memcached-bench获得的性能数据:

-----------------------------------------------------
|            |  go-memcached   | original memcached |
|            |      v1         |      v1.4.13       |
| workerMode ----------------------------------------
|            | Kqps | cpu time |  Kqps  | cpu time  |
|----------------------------------------------------
| GetMiss    | 648  |    17    |  468   |   33      |
| GetHit     | 195  |    16    |  180   |   17      |
| Set        | 204  |    14    |  182   |   25      |
| GetSetRand | 164  |    16    |  157   |   20      |
-----------------------------------------------------

下载页面提供了go-memcached和go-memcached-bench的静态链接二进制文件.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有