There are applications that need something in between - great performance but some of those features, too. In our case, the motivation were internal caches in Hibernate Second Level Cache. Therefore Infinispan 8.0.1.Final brings the simple cache - alternative implementation of the AdvancedCache interface optimized for maximum performance when you need just the basics.
The table below shows which features are available in simple cache:
Feature | Availability |
---|---|
Basic map-like API | ✔ |
Cache listeners (non-clustered) | ✔ |
Expiration | ✔ |
Eviction | ✔ |
Security | ✔ |
JMX access | ✔ |
Statistics | ✔ |
Transactions | ✘ |
Invocation batching | ✘ |
Persistence (cache stores and loader) | ✘ |
Map Reduce Framework | ✘ |
Distributed Executors Framework | ✘ |
Custom interceptors | ✘ |
Indexing (querying) | ✘ |
Compatibility (embedded/server) | ✘ |
Store as binary | ✘ |
Configuring simple cache is as simple as adding one attribute to the XML configuration:
While configuration schema allows to set up the unsupported features, doing so results in an exception when the cache is created.
You can also configure simple cache programmatically:
So, what kind of performance improvement can you expect? We had run basic (single-threaded) benchmark using JMH and this is what we got:
Implementation | get() (operations/s) | put() (operations/s) | ||||
---|---|---|---|---|---|---|
ConcurrentHashMap | 128,354,135 | ± | 2,178,755 | 33,980,088 | ± | 28,487 |
Simple cache | 86,969,897 | ± | 738,935 | 14,044,642 | ± | 14,280 |
Local cache | 17,280,018 | ± | 361,910 | 2,267,850 | ± | 44,814 |
This gives us about 5✕ speedup for reads and 6✕ for writes. Your mileage may vary, but it's certain that simple cache provides substantial performance benefits.
So, if your use-case allows it, try out simple cache and let us know. It's as simple as one configuration attribute!
No comments:
Post a Comment