标签: ehcache

有没有办法配置Amazon EC2实例以支持EhCache所需的多播发现

有没有办法配置Amazon EC2实例以支持EhCache自动发现所需的多播?(通过iptables hacks等)/

multicast ehcache amazon-ec2

10
推荐指数
1
解决办法
9287
查看次数

EhCache密钥类型

在EhCache中,向缓存添加元素时:

cache.put(new Element("key1", "value1"));

// Element constructors :
Element(Object key, Object value)
Run Code Online (Sandbox Code Playgroud)

我看到我可以给出一个Object关键指数.

我如何使用它来拥有一个"复杂"键,由多个int组成:(userId,siteId,...)而不是字符串作为索引?

谢谢

java ehcache

10
推荐指数
1
解决办法
8297
查看次数

简单的Java缓存库或设计模式?

我需要经常访问耗时计算的结果.结果不经常更改,因此我不得不不时重新计算数据,但可以暂时使用过时的结果.最简单的方法是什么?现有的库方法或设计模式是什么?

我在想类似的东西

private static List myCachedList = null;

...

// refresh list once in 3600 seconds
if (needsRefresh(myCachedList, 3600)) {
    // run the calculation
    myCachedList = ...
}
// use either updated or previous value from here on
Run Code Online (Sandbox Code Playgroud)

一个正确的实现可能不是微不足道的,它可能必须处理线程安全,竞争条件等,所以我宁愿使用一个经过验证的实现,而不是在我自己.

java memcached caching design-patterns ehcache

10
推荐指数
1
解决办法
1万
查看次数

从我的二级ehcache中检索项目后获取"org.hibernate.LazyInitializationException"异常

我正在使用Hibernate 5.1.0.Final和ehcache以及Spring 3.2.11.RELEASE.我@Cacheable在其中一个中设置了以下注释DAO:

@Override
@Cacheable(value = "main")
public Item findItemById(String id)
{
    return entityManager.find(Item.class, id);
}
Run Code Online (Sandbox Code Playgroud)

返回的项目有许多关联,其中一些是懒惰的.例如,它(最终)引用该字段:

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "product_category", joinColumns = { @JoinColumn(name = "PRODUCT_ID") }, inverseJoinColumns = { @JoinColumn(name = "CATEGORY_ID") })
private List<Category> categories;
Run Code Online (Sandbox Code Playgroud)

我注意到在我标记的一个方法中@Transactional,当从二级缓存中检索到上述方法时,我在尝试迭代categories字段时得到以下异常:

@Transactional(readOnly=true)
public UserContentDto getContent(String itemId, String pageNumber) throws IOException
{
    Item Item = contentDao.findItemById(ItemId);
   …
   // Below line causes a “LazyInitializationException” exception
   for (Category category : item.getParent().getProduct().getCategories())
    {
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪是:

16:29:42,557 INFO  [org.directwebremoting.log.accessLog] (ajp-/127.0.0.1:8009-18) …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate ehcache lazy-initialization

10
推荐指数
2
解决办法
6079
查看次数

JBoss Cache和Ehcache的性能

我正在考虑使用JBoss Cache或Ehcache来实现缓存.在查看这两个API后,我直觉认为JBoss可能比Ehcache更有效,因为它可以将原始对象放入缓存,而Ehcache需要将数据包装在Element对象中.

我设置了一个快速的工作台,在缓存中重复插入密钥,值元组.键和值类非常简单:

键:

public class Key implements Serializable {
    private static final long serialVersionUID = -2124973847139523943L;

    private final int key;

    public Key(int pValue) {
        this.key = pValue;
    }

    public int getValue() {
        return this.key;
    }

    @Override
    public String toString() {
        return "Key [key=" + this.key + "]";
    }
}
Run Code Online (Sandbox Code Playgroud)

值:

public class Value implements Serializable{

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -499278480347842883L;
}
Run Code Online (Sandbox Code Playgroud)

当将100000个对象的结果插入到内存中时,Ehcache使用13396个字节来存储对象,而JBoss使用5712个字节进行相同的操作(由于使用了ConcurrentHashMap5680字节的相同测试,因此很好).

然而,当我查看执行时间时,我有一个非常糟糕的惊喜:Ehcache需要300毫秒来执行测试,而JBossCache需要44秒才能执行相同操作.我很确定我的JBoss配置中有一些东西在解释这种差异.

Ehcache以编程方式初始化如下:

CacheConfiguration cacheConfiguration = …
Run Code Online (Sandbox Code Playgroud)

java performance ehcache jboss-cache

9
推荐指数
1
解决办法
9595
查看次数

带有ehcache的Hibernate 4是否需要ehcache-core库?

我正在尝试将应用程序从Hibernate 3升级到Hibernate 4.该应用程序使用ehcache.

升级到Hibernate 4.2.0.Final时,我按照建议添加了对hibernate-ehcache-4.2.0.Final的依赖.

当我启动应用程序时,我收到以下错误:

Caused by: java.lang.NoClassDefFoundError: org/hibernate/cache/TimestampsRegion
Run Code Online (Sandbox Code Playgroud)

根据http://www.javacraft.org/2012/03/migrate-to-hibernate-4-ehcache.html我应该删除对ehcache-core的依赖,只使用hibernate提供的jar来解决这个错误.

现在,如果我按照这些说明删除此依赖项,则使用net.sf.ehcache.CacheManager的应用程序不再编译.

// For example, this no-longer works
CacheManager manager = CacheManager.getInstance();
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我可以使用这两个库并继续像以前一样工作(不更新应用程序),或者我是否必须更改应用程序,在这种情况下hibernate-ehcache甚至提供访问缓存所需的功能?

java hibernate ehcache

9
推荐指数
1
解决办法
5659
查看次数

Spring缓存抽象 - 分布式环境

我想在我的分布式Web应用程序中使用spring cache abstraction.

我的Web应用程序由一个Web应用程序组成,该应用程序在带有负载均衡器的3个不同的tomcats上运行.

现在,我的问题是当另一个tomcat执行更新时,@Evict如何在所有tomcats中缓存?

春天是否支持这种事情?

谢谢!

java spring tomcat caching ehcache

9
推荐指数
1
解决办法
5727
查看次数

如何在ehcache中配置maxEntriesLocalHeap?

ehcache doc(http://ehcache.org/documentation/configuration/cache-size)将maxEntriesLocalHeap描述为

高速缓存可以在本地堆内存中使用的最大高速缓存条目数或字节数,或者,当设置为CacheManager级别(仅限maxBytesLocalHeap)时,可用于该CacheManager下的所有高速缓存的本地池.每个缓存或CacheManager级别都需要此设置.

这是否意味着对于此配置:

<cache
        name="myCache"
        maxEntriesLocalHeap="5000"
        eternal="false"
        overflowToDisk="false"
        timeToLiveSeconds="10000"
        memoryStoreEvictionPolicy="FIFO" />
Run Code Online (Sandbox Code Playgroud)

可以添加到缓存的最大对象数为5000.这些对象可以包含多个子对象,但只添加顶级父对象作为条目.因此,如果每个对象都引用了另外两个对象,那么maxEntriesLocalHeap对象的数量可能会增加到15000(此时最旧的对象会在添加新对象时被换出).它是否正确 ?

spring caching ehcache

9
推荐指数
1
解决办法
8461
查看次数

如何更新/删除已在项集合中缓存的项目

我正在使用Spring和EhCache

我有以下方法

@Override
@Cacheable(value="products", key="#root.target.PRODUCTS")
public Set<Product> findAll() {
    return new LinkedHashSet<>(this.productRepository.findAll());
}
Run Code Online (Sandbox Code Playgroud)

我有其他使用@Cacheable和@CachePut以及@CacheEvict的方法.

现在,假设数据库返回100个产品并且它们被缓存key="#root.target.PRODUCTS",然后其他方法将插入 - 更新 - 删除项目到数据库中.因此,通过它缓存的产品key="#root.target.PRODUCTS"不再相同,例如数据库.

我的意思是,检查以下两种方法,他们能够更新/删除一个项目,同一项目缓存在另一个key="#root.target.PRODUCTS"

@Override
@CachePut(value="products", key="#product.id")
public Product update(Product product) {
    return this.productRepository.save(product);
}

@Override
@CacheEvict(value="products", key="#id")
public void delete(Integer id) {
    this.productRepository.delete(id);
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以通过更新/删除位于缓存中的项目key="#root.target.PRODUCTS",如果产品已更新,则为100,如果删除了产品,则为499.

我的观点是,我想避免以下情况:

@Override
@CachePut(value="products", key="#product.id")
@CacheEvict(value="products", key="#root.target.PRODUCTS")
public Product update(Product product) {
    return this.productRepository.save(product);
}

@Override
@Caching(evict={
        @CacheEvict(value="products", key="#id"),
        @CacheEvict(value="products", key="#root.target.PRODUCTS")
})
public void delete(Integer id) {
    this.productRepository.delete(id); …
Run Code Online (Sandbox Code Playgroud)

spring caching ehcache spring-3 spring-cache

9
推荐指数
2
解决办法
2万
查看次数

手动更新数据库后清除 Hibernate 二级缓存

很快,我有一个实体映射到 DB (Oracle) 中的视图,并启用了第二级缓存(只读策略)——ehcache。

如果我手动更新数据库中的某些列 - 缓存将不会更新。

我没有找到任何方法来做到这一点。仅当更新将通过 Hibernate 实体完成时。

我可以以某种方式实现这个功能吗?

也许工作来监视表(或视图)?或者也许有一些方法可以通知 Hibernate 关于具体表中 DB 的变化。

感谢未来的答案!

java oracle caching hibernate ehcache

9
推荐指数
1
解决办法
1万
查看次数