Memcache vs Java Memory

2019-03-08 01:53发布

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?

3条回答
啃猪蹄的小仙女
2楼-- · 2019-03-08 02:19

I just made a benchmark between a concurrent hash map, memcached, and MySQL.

HashMap vs. memcached vs. 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/

查看更多
欢心
3楼-- · 2019-03-08 02:25

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...)

查看更多
Bombasti
4楼-- · 2019-03-08 02:33

Advantages of Java memory over memcache:

  1. Java memory is faster (no network).
  2. Java memory won't require serialization, you have Java objects available to you.

Advantages of memcache over Java memory:

  1. It can be accessed by more than one application server, so your cache will be shared among all your app servers.
  2. It can be accessed by a variety of different servers, so long as they all agree on the key scheme and the serialization.
  3. It will discard expired cache values, so you get time-based invalidation.
查看更多
登录 后发表回答