gpt4 book ai didi

java - Spring @Cacheable 分页方法

转载 作者:行者123 更新时间:2023-12-02 14:45:20 27 4
gpt4 key购买 nike

我在使用多参数和分页的 @Cacheable 时遇到问题。

@Cacheable(value = "books", key = "#p0")
public List<Book> findBooks(Long loggedUserId, String q, Integer firstResult, Integer maxResults) {

...

return result;

}

问题是当我第一次调用该方法时,内容已成功缓存,结果正如我所期望的那样。但是当我第二次调用时,返回的结果等于第一次。如果我禁用缓存或删除 key ,结果会有所不同。

必须使用 key ,因为有时指定用户的缓存会被删除。

谢谢。

最佳答案

我认为你的问题是缺乏对 Cacheable 注释的理解,而你正在使用它。那么让我看看是否可以提供帮助

您的注释是@Cacheable(value = "books", key = "#p0")

这意味着当调用该方法时,它将获取第一个参数并在缓存中查找,如果有结果,则将返回结果而不是执行该方法。它仅检查第一个参数。

您的缓存键必须是唯一标识结果集的内容。在这种情况下,用户 ID 在多个结果中是通用的,并且不能唯一标识页面。

你比我更了解你的用例,但这样的东西可能会更好:

@Cacheable(value = "books", key = {"#p1","#p2","#p3"})
public List<Book> findBooks(Long loggedUserId, String q, Integer firstResult, Integer maxResults) {

...

return result;

}

以上内容将根据搜索查询和页面索引(结果的开始和结束)进行缓存。因为我不知道你的用例,所以我不知道为什么用户 ID 在那里,但根据我所掌握的信息,这三个应该唯一标识一个结果页面。

关于java - Spring @Cacheable 分页方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com