是否可以查询Hazelcast缓存?如果是,如何做



我正在尝试使用hazelcast实现缓存。

这是我的密码。我的问题是,当执行findAllGames((时,我将所有游戏缓存在"gamesCache"中,而当执行findGameByTypes((后,我希望它查询"gamesCache",而不是访问数据库并返回结果。

@Cacheable(cacheNames = "gamesCache", key = "#root.methodName")
public List<Game> findAllGames() {
List<Game>  games = gamesDao.getAllGames(); // dao call
//some database call
}
public List<Game> findGameByTypes(GameType gameType) {
List<Game> games = gamesDao.getGamesByType(gameType); // dao call
//some logic
}
public class Game implements Serializable {
private long gameId;
private String gameName;
private GameType gameType;
}
public class GameType implements Serializable {
private long gameId;
private String gameGenre;
private Boolean status;
}

findAllGames((总是比findGamesByTypes((先命中。

现在,缓存的地图以"findAllGames"为键,以游戏列表为值生成。现在有没有任何方法可以使用GameType属性作为条件来查询地图。

有什么方法可以实现这一点吗?我对其他建议也持开放态度。

根据@wildnez的建议,您可以使用PRedicate和/或SQLQuery。此外,由于您使用的是Spring,您还可以从Spring Data Hazelcast项目中受益,该项目会根据方法名称自动为您生成查询:https://github.com/hazelcast/spring-data-hazelcast

但是你需要改变你的缓存方式。与其在缓存中只有一个条目,使用关键字findAllGames并将所有游戏存储在集合中,不如将所有条目单独存储在缓存中,gameId作为关键字&CCD_ 3作为值。通过这种方式,您可以使用任一方法查询值。

您可以使用谓词或SqlQuery查询Hazelcast Map/Cache。查看此处的详细文档:https://docs.hazelcast.org/docs/3.11/manual/html-single/index.html#distributed-查询

请查看Hazelcast提供的MapLoader。https://docs.hazelcast.org/docs/3.8/javadoc/com/hazelcast/core/MapLoader.html

您必须实现loadAll,这将是对findAllGames((的调用,它将把键保存为对象的gameType。

任何要加载的调用都应该是findGameByTypes调用,如果无法在缓存中找到数据,就会调用该调用。

看看这个博客,确保你了解其中的陷阱。https://dzone.com/articles/hazelcasts-maploader-pitfalls

相关内容

最新更新