简单,可能是愚蠢的问题:假设我有一个Java服务器,它在内存中存储常用的键和值,我可以查询(比如说在HashMap中)
使用Memcache(甚至是Redis)之间的区别是什么?它们都将东西存储在内存中。一个或另一个有益处吗? Memcache是否减少了内存占用?可以在更少的内存中存储更多?更快查询?没有区别?
答案 0 :(得分:48)
Java内存优于memcache:
memcache优于Java内存的优点:
答案 1 :(得分:26)
我刚刚在并发哈希映射,memcached和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}之类的内容},更不用说像EHCache或GigaSpaces XAP这样的分布式内容了。
缓存项目(XAP,OSCache,EhCache,Coherence等)可以分发缓存条目,因此您可以获得自然的分片和其他设施; Coherence可以管理事务和直写,XAP实际上设计用作记录系统(写入它的同步和复制,这样你就可以使用内存数据网格作为实际的数据存储机制而不是使用数据库。)
Memcached是......好吧,你可以从一系列机器上访问一个memcached服务器实例。 Memcached作为API只是一个键/值存储,并且在客户端完成完全分发。我猜这肯定有基础知识,而且它肯定有多种语言API,但它确实非常跛行。
(顺便说一下,GigaSpaces有一个Memcached层,所以你可以理论上使用memcached作为记录系统......)