net.sf.ehcache和org.ehcache之间的区别?

H S*_*aju 6 spring caching ehcache-3

net.sf.ehcache和org.ehcache有什么区别?

net.sf.ehcache的当前版本为2.10.5,而org.ehcache的当前版本为3.5.2。

Spring使用net.sf.ehcache的CacheManager,而org.ehcache的CacheManager不兼容。

有什么具体原因吗?请解释。

Ort*_*kni 5

您可以在http://www.ehcache.org/downloads/页面上验证,Ehcache 3 使用的是 package prefix org.ehcache,Ehcache 2 使用的是 package prefix net.sf.ehcache。就是这样。

  • 封装差异很明显。还有一个区别是 Ehcache2 位于 SVN 存储库上,而 Ehcache3 位于 GIT 存储库上。但就没有其他区别了吗? (2认同)

Shi*_*lan 3

在很多层面上都有不同。在 ehcache 3.x 中,Element 不再存在。应直接将键和值放入缓存中,因此您可以在创建缓存时提供类型:

      Cache<Long, String> myCache = cacheManager.getCache("myCache", Long.class, String.class);
Run Code Online (Sandbox Code Playgroud)

因此,在检索值时,您可以避免 getObjectValue 的麻烦,而只需将 Cache 视为 ConcurrentMap。因此,如果键不存在,您将不会得到 NullPointerException,因此您不需要检查 cache.get(cacheKey) != null

cache.get(cacheKey);
Run Code Online (Sandbox Code Playgroud)

实例化CacheManager的方式也发生了变化。你不会 getInstance 所以它不再是单例了。相反,您会得到一个构建器,这更好,特别是您可以为其提供内联配置参数:

        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
            .withCache("preConfigured",
                       CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
                                                      ResourcePoolsBuilder.heap(100))
                       .build())
                        .build(true);
Run Code Online (Sandbox Code Playgroud)