Memcache与Java内存

时间:2011-03-28 22:21:07

标签: caching memory memcached redis

简单,可能是愚蠢的问题:假设我有一个Java服务器,它在内存中存储常用的键和值,我可以查询(比如说在HashMap中)

使用Memcache(甚至是Redis)之间的区别是什么?它们都将东西存储在内存中。一个或另一个有益处吗? Memcache是​​否减少了内存占用?可以在更少的内存中存储更多?更快查询?没有区别?

3 个答案:

答案 0 :(得分:48)

Java内存优于memcache:

  1. Java内存更快(没有网络)。
  2. Java内存不需要序列化,您可以使用Java对象。
  3. memcache优于Java内存的优点:

    1. 可以通过多个应用服务器访问它,因此您的缓存将在所有应用服务器之间共享。
    2. 它可以被各种不同的服务器访问,只要它们都同意密钥方案和序列化。
    3. 它将丢弃过期的缓存值,因此您可以获得基于时间的失效。

答案 1 :(得分:26)

我刚刚在并发哈希映射,memcached和MySQL之间建立了基准。

HashMap vs. memcached vs. MySQL

结果如下:

键入插入查找删除

ConcurrentHashMap 264ms 93ms 82ms

Memcached 6549ms 5976ms 4900ms

Mysql 55754ms 26002ms 57899ms

线程池用于此基准测试。

可在此处找到更多信息: http://www.incentergy.de/2013/12/big-data-architecture-patterns-for-performance/

此外,以下缓存可能是memcached的替代方法: https://code.google.com/p/kitty-cache/

答案 2 :(得分:15)

这取决于你想要什么。内存中的地图会更快;数据到期并不是真正的问题(参见:Google Guava的MapMaker,它可以创建一个在读取和/或写入后使条目过期的地图,让我们不要忘记OSCache和{{3}之类的内容},更不用说像EHCacheGigaSpaces XAP这样的分布式内容了。

缓存项目(XAP,OSCache,EhCache,Coherence等)可以分发缓存条目,因此您可以获得自然的分片和其他设施; Coherence可以管理事务和直写,XAP实际上设计用作记录系统(写入它的同步和复制,这样你就可以使用内存数据网格作为实际的数据存储机制而不是使用数据库。)

Memcached是......好吧,你可以从一系列机器上访问一个memcached服务器实例。 Memcached作为API只是一个键/值存储,并且在客户端完成完全分发。我猜这肯定有基础知识,而且它肯定有多种语言API,但它确实非常跛行。

(顺便说一下,GigaSpaces有一个Memcached层,所以你可以理论上使用memcached作为记录系统......)