Simple, probably dumb question: Suppose I have a Java server that stores in memory commonly used keys and values which I can query (let's say in a HashMap)
What's the difference between that and using Memcache (or even Redis)? They both store things in memory. Is there a benefit to one or the other? Does Memcache leaves less of a memory footprint? Can store more in less memory? Faster to query? No difference?
I just made a benchmark between a concurrent hash map, memcached, and MySQL.
Here are the results:
Type Insert Lookup Remove
ConcurrentHashMap 264ms 93ms 82ms
Memcached 6549ms 5976ms 4900ms
Mysql 55754ms 26002ms 57899ms
A thread pool was used for this benchmark.
Some more information can be found here: http://www.incentergy.de/2013/12/big-data-architecture-patterns-for-performance/
Further the following cache might be an alternative to memcached: https://code.google.com/p/kitty-cache/
It depends on what you're wanting. An in-memory map will be faster; data expiry isn't really an issue (see: Google Guava's MapMaker, which can create a map that expires entries after reads and/or writes, and let's not forget things like OSCache and EHCache, not to mention distributed things like GigaSpaces XAP or Coherence).
The caching projects (XAP, OSCache, EhCache, Coherence, etc) can distribute cache entries, so you get natural sharding and other facilities; Coherence can manage transactions and write-through, and XAP is actually designed to serve as a system of record (where writing to it gets synchronized and replicated, such that you are using an in-memory data grid as your actual data storage mechanism rather than using a database.)
Memcached is... well, you can access a memcached server instance from a series of machines. Memcached as an API is simply a key/value store, and distribution is entirely accomplished on the client side. It's certainly got the basics, I guess, and it's definitely got multiple language APIs, but it's really pretty limp otherwise.
(BTW, GigaSpaces has a Memcached layer, so you could theoretically use memcached as a system of record...)
Advantages of Java memory over memcache:
Advantages of memcache over Java memory: