簡體   English   中英

如何緩存返回相同對象列表但基於不同條件的方法?

[英]How to cache methods that return the same list of objects, but based on different conditions?

例如,我有 3 種方法。 所有從同一個存儲庫返回數據並將其轉換為 DTO。

我應該如何注釋它們?

可以用相同的@Cacheable("Dishes_DTO")注釋所有三個嗎? 當其中一個方法依次執行時會發生什么,它會覆蓋數據還是重復?

public List<DishResponseDTO> getAllToday() {
    List<Dish> dishlsit = dishRepository.getAllByDateAdded(LocalDate.now(clock));
    return dishlsit.stream()
            .map(DishMapper::toDishResponseDTO)
            .collect(Collectors.toList());
}

public List<DishResponseDTO> getAll() {
    List<Dish> dishlsit = dishRepository.findAll();
    return dishlsit.stream()
            .map(DishMapper::toDishResponseDTO)
            .collect(Collectors.toList());
}

public List<DishResponseDTO> getDishHistoryByRestaurant(int restaurantId) {
    return dishRepository.getAllByRestaurantId(restaurantId)
            .stream()
            .map(DishMapper::toDishResponseDTO)
            .collect(Collectors.toList());
}

如果您使用一個緩存,則需要有單獨的鍵。 您可以執行的一種方法:

@Cacheable(value="dishdto", key="-1")
public List<DishResponseDTO> getAllToday();

@Cacheable(value="dishdto", key="-2");
public List<DishResponseDTO> getAll();

@Cacheable("dishdto")
public List<DishResponseDTO> getDishHistoryByRestaurant(int restaurantId);

這使用整數鍵並期望restaurantId不會變為負數。

你的問題有很多方面:

  • 緩存查詢
  • 列出結果
  • 時間相關結果
  • 報告可移動數據,一般而言

設計問題:

您當前的設計在緩存和內存中保存重復數據,因為所有三種方法結果可能包含相同的菜。

由於其移動數據,您需要經常更新緩存,例如通過在緩存上設置 5 分鍾的到期參數(或 TTL)。 這意味着您將重新閱讀相同的菜餚數據,盡管它可能不會再發生變化。 這可以通過存儲庫或數據庫中的緩存來解決。 盡管如此,您仍會多次為同一數據條目生成 DTO。

如果事情變得回避,最好將dish dto對象和查詢結果的緩存分開。

Jackson (Java):反序列化相同的屬性名但返回不同的對象。 其中一個返回 object 和第二個列表<object><div id="text_translate"><p>我有一個這樣的 POJO:</p><pre> public class NewClass { String name; @JsonProperty("productType") ProductType productType2005; List&lt;ProductType&gt; productType; }</pre><p> 我想將 json 反序列化為 Pojo。 問題是我的屬性名稱相同 productType 但我可以期待兩種不同的返回類型或數據結構。</p><ol><li> 返回ProductType</li><li> return List&lt;ProductType&gt;因為屬性名稱相同我如何有效地使用 Jackson 注釋來解決它?</li></ol><p> 我使用 rest-assured 進行反序列化,使用 Lombok 進行典型的 getter 和 setter。</p></div></object>

[英]Jackson (Java) : deserialization for the same property name but return different objects. for one it return object and second List<Object>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM