【问题标题】:Cache evict a single object in java spring在java spring中缓存驱逐单个对象
【发布时间】:2018-05-17 21:35:12
【问题描述】:

我正在尝试缓存对象列表,比如说“订单”。它完美地缓存了它。

将一个新对象放入缓存列表中,我正在做的是这样;

    cacheManager.getCacheNames().parallelStream().forEach(name -> cacheManager.getCache(name).put("order", order));

并从我所做的缓存中逐出该特定订单;

    cacheManager.getCacheNames().parallelStream().forEach(name -> cacheManager.getCache(name).evict(orderId));

但是驱逐对我不起作用。

如何删除/更新缓存中过时的对象?有没有办法迭代缓存,直到我得到所需的对象并更新它。

任何帮助将不胜感激。

【问题讨论】:

    标签: java spring spring-mvc caching


    【解决方案1】:

    要将对象放入缓存,您应该使用orderId 而不是字符串值"order"

    cacheManager.getCacheNames().parallelStream().forEach(name -> cacheManager.getCache(name).put(orderId, order));
    

    【讨论】:

    • 缓存 PUT 工作正常。但它不会驱逐旧条目。假设我的缓存有 10 个订单条目。然后,在 put 之后我有 11 个条目。使用更新的对象和旧的对象。如何驱逐旧的?
    • @Muneeb 您使用的是什么实际的缓存提供程序?
    • @Muneeb 用于通过新实体更新旧实体,您需要使用相同的键调用 put 方法。
    • 我使用的是spring mvc,我在dispatcher-servlet中定义了bean。在我使用与“orderId”相同的键调用 Put 方法后,我已经记录了缓存。但没有运气。缓存会附加新对象,但不会删除旧对象。
    • 我必须在哪里定义密钥?或没有在哪里?而且我还必须在控制器中对该函数使用任何注释
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2016-09-10
    • 2018-03-23
    • 2018-12-16
    • 2011-11-11
    • 2021-02-01
    • 1970-01-01
    相关资源
    最近更新 更多