缓存工作正常,但是我的要求明智的是,getAll()特定ID不会在单独调用时得到更新

时间:2019-05-22 14:35:28

标签: spring-boot spring-cache

我有一个带有rest控制器的spring-boot应用程序。 用户是模特

其他控制器分别用于getAllNotes(),getNoteById(),updateNoteById()

@Cacheable(key="'#id'")
@GetMapping("/notes/{id}")
public Note getNoteById(@PathVariable(value = "id") Long noteId)
{
    return noteRepository.findById(noteId).get();
}

@Cacheable()
@GetMapping("/notes")
public List<Note> getAllNotes()
{
    return noteRepository.findAll();
}

@CachePut(key="'#id'")
@PutMapping("/notes/{id}")
public Note updateNoteById(@PathVariable(value = "id") Long noteId, @Valid @RequestBody Note noteDetails)
{
    Note note = noteRepository.findById(noteId).get();          
    ...
    return noteRepository.save(note);
}

现在我的问题是,如果我要从缓存中获取它,甚至在更新之后,如果我尝试使其与修改后的数据一致,我的问题就单独存在

但是,如果我正在访问getAllNotes(),那么它将是第一次从数据库中检索,并且下次是从缓存中检索。但是,我要更新的特定字段在此字段中没有得到更新。

我正在遵循的步骤

getAllNotes()// [{“ id”:11,“ title”:“ title11”},{“ id”:12,“ title”:“ title12”}]]

getNoteById(11)// {“ id”:11,“ title”:“ title11”}

updateNoteById(11,Note note)//注释-{“ id”:11,“ title”:“ title1111”}

getNoteById(11)// {“ id”:11,“ title”:“ title1111”}

getAllNotes()// [{“ id”:11,“ title”:“ title11”},{“ id”:12,“ title”:“ title12”}]]

//期望[{“ id”:11,“ title”:“ title1111”},{“ id”:12,“ title”:“ title12”}]

这不是更新第一个数据,因为我认为它将getAllNotes()的整个输出作为一个缓存对象,而不是作为单个缓存(byId)的组合,并且不保留单个缓存的引用

但是,我看到的the website可以实现

0 个答案:

没有答案