web-dev-qa-db-ja.com

リスト内のすべての要素を個別にSpringキャッシュする

CRUDアプリにキャッシュを追加しようとしていますが、次のようなことを始めました。

_@Cacheable("users")
List<User> list() {
    return userRepository.findAll()
}
@CachePut(value = "users", key = "#user.id") 
void create(User user) {
    userRepository.create(user)
}
@CachePut(value = "users", key = "#user.id") 
void update(User user) {
    userRepository.update(user)
}
@CacheEvict(value = "users", key = "#user.id") 
void delete(User user) {
    userRepository.delete(user)
}
_

私が抱えている問題は、作成/更新/削除操作で、list()操作のキャッシュに既に格納されている要素を更新できることです(list()はデータベースからプルされないことに注意してくださいしかし、データエンジン)、しかし、私はそれを行うことができません。

list()によって返されるすべての要素を個別にキャッシュしたいので、他のすべての操作は_#user.id_を使用してキャッシュを更新できます。または、すべての操作を行って、すでにキャッシュに保存されているリストを更新します。

更新されたときにキャッシュ全体を追い出すことができると読みましたが、次のようなことは避けたいと思います。

_@CacheEvict(value = "users", allEntries=true) 
void create(User user) {
    userRepository.create(user)
}
_

キャッシュされたコレクション内で値を作成/更新/削除する方法はありますか?または、コレクションのすべての値を個別のキーとしてキャッシュするには?

7
Federico Piazza
8
John Blum