相关疑难解决方法(0)

从同一个类中调用时,忽略Spring缓存@Cacheable方法

我正在尝试@Cacheable从同一个类中调用一个方法:

@Cacheable(value = "defaultCache", key = "#id")
public Person findPerson(int id) {
   return getSession().getPerson(id);
} 

public List<Person> findPersons(int[] ids) {
   List<Person> list = new ArrayList<Person>();
   for (int id : ids) {
      list.add(findPerson(id));
   }
   return list;
}
Run Code Online (Sandbox Code Playgroud)

并希望结果findPersons也被缓存,但@Cacheable注释被忽略,并且findPerson每次都执行方法.

我在这里做错了什么,或者这是有意的吗?

spring caching spring-cache

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

Guava如何在CacheBuilder中过期?

我想使用CacheBuilder,如下所示:

带有过期密钥的基于Java时间的映射/缓存

但是我不明白Guava知道什么时候到期.

番石榴是如何做到的,它会带来什么样的性能成本?

java collections caching map guava

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

使用LinkedHashMap实现LRU缓存

我试图使用LinkedHashMap实现LRU缓存.在LinkedHashMap(http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)的文档中,它说:

请注意,如果将键重新插入地图,则插入顺序不会受到影响.

但是,当我做以下投入时

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private int size;

    public static void main(String[] args) {
        LRUCache<Integer, Integer> cache = LRUCache.newInstance(2);
        cache.put(1, 1);
        cache.put(2, 2);
        cache.put(1, 1);
        cache.put(3, 3);

        System.out.println(cache);
    }

    private LRUCache(int size) {
        super(size, 0.75f, true);
        this.size = size;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > size;
    }

    public static <K, V> LRUCache<K, V> newInstance(int size) {
        return new LRUCache<K, V>(size);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出是

{1=1, 3=3}
Run Code Online (Sandbox Code Playgroud)

这表明重新插入确实影响了订单.有人知道任何解释吗?

java insert linkedhashmap lru

21
推荐指数
3
解决办法
3万
查看次数

在SQS队列中使用许多使用者

我知道可以使用多个线程来使用SQS队列.我想保证每条消息都会消耗一次.我知道可以更改消息的可见性超时,例如,等于我的处理时间.如果我的进程花费的时间超过可见性超时(例如,连接速度慢),则其他线程可以使用相同的消息.

保证邮件处理一次的最佳方法是什么?

queue message-queue amazon-sqs

8
推荐指数
1
解决办法
5380
查看次数

带有过期条目的Java集合

我需要在指定的时间范围内跟踪某些事件,并在事件数量达到一定数量时采取行动.更详细地说,我连接到外部服务并提交已确认状态等于CONF或FAIL的请求.我需要能够监视响应以检测我是否在给定时间范围内得到异常数量的失败,例如> 3在最后5秒内失败,以便我可以检查错误并采取相应措施.我可以选择连续3次检查,但我更喜欢基于时间的方法.

CacheLoader在阅读这篇文章后一直在测试Guava ,但是当缓存中的条目(我只存储FAIL事件)似乎按预期到期时,对size()(确定失败次数)的调用也包括过期的条目.如果我没有误解事情,这似乎是根据文档应该如何工作?有没有办法从缓存中获取"活动"事件的数量?

我想另一种解决方案是使用像Esper这样的CEP框架,但对于我的简单需求而言似乎有点过分和麻烦.有没有人有一个完全不同的方法来建议这将有助于我的要求?谢谢

java collections guava

4
推荐指数
1
解决办法
5627
查看次数

如何实现带有条目自动过期的 CacheMap?

大家好我想在java中实现缓存映射,其中映射条目在给定时间后到期。

我有这样的接口,我必须实现这些方法,但我不明白实际是如何开始的。

    public class CacheMapImpl implements CacheMap<Integer, String> {

    @Override
    public void setTimeToLive(long timeToLive) {


    }

    @Override
    public long getTimeToLive() {

        return 0;
    }

    @Override
    public String put(Integer key, String value) {

        return null;
    }

    @Override
    public void clearExpired() {


    }

    @Override
    public void clear() {


    }

    @Override
    public boolean containsKey(Object key) {

        return false;
    }

    @Override
    public boolean containsValue(Object value) {

        return false;
    }

    @Override
    public String get(Object key) {

        return null;
    }

    @Override
    public boolean isEmpty() {

        return …
Run Code Online (Sandbox Code Playgroud)

java caching dictionary

2
推荐指数
1
解决办法
4368
查看次数

清除内存中的惰性值

我正在写一个JRPG风格的游戏,并在YAML文件中定义我的物品/敌人等.而不是在运行时加载它们(这在Scala中被证明是一种痛苦,特别是在Android上)我决定将它们预编译为Scala对象作为惰性值.

我唯一担心的是,最终,当访问这些值时,对象将开始占用比实际需要更多的内存.

无论如何重新初始化Scala对象或将惰性值清除回默认状态?或者,有没有更好的方法来完成我在这里尝试做的事情?

scala lazy-initialization

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