在Spring Boot中没有更新缓存

时间:2018-01-18 07:33:09

标签: java spring spring-boot caching

我正在使用Spring Boot @CachePut和@Cacheable注释来缓存数据。

list_of_gifs = ['F:\\test1.gif', 'F:\\test2.gif', 'F:\\test3.gif', 'F:\\test4.gif']

class GIFLabel(QLabel):
    def __init__(self, gifs, *args, **kwargs):
        QLabel.__init__(self, *args, **kwargs)
        self.mGifs = gifs
        self.changeGIF()

    def changeGIF(self):
        gif = random.choice(self.mGifs)
        movie = QMovie(gif)
        self.setMovie(movie)
        movie.start()

class Window(QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.resize(600, 600)
        self.initUI()

    def initUI(self):
        self.btn = QPushButton("change", self)
        self.label = GIFLabel(list_of_gifs, self)
        self.btn.clicked.connect(self.label.changeGIF)
        self.grid = QVBoxLayout(self)
        self.grid.addWidget(self.btn)
        self.grid.addWidget(self.label)
        self.grid.addStretch(1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    MyApp = Window()
    MyApp.show()
    sys.exit(app.exec_())

在buildCache中,我从远程数据库获取值并将这些值保存在本地数据库和缓存中。在getCache方法中,我从本地DB获取值。当我第一次调用getCache方法时,它会被执行并且本地数据库值会保存在缓存中。然后我调用了buildCache方法来更新缓存以及本地数据库值。之后,我再次调用getCache方法来获取更新的值。但是这种方法仍然会返回旧值而不是新值

简而言之,为了刷新缓存,我执行@CachePut方法。但是当我调用@Cacheable方法时,我没有得到更新的值。

请告诉我哪里出错了。

1 个答案:

答案 0 :(得分:0)

@CacheEvict(value ="user" ,allEntries = true)
@CachePut(value = "user",key = "#userDTO.id")
@PostMapping("user/update")
public List<User> updateUser(@RequestBody UserDTO userDTO){
    return userService.updateUser(userDTO);
}

首先删除现有缓存然后更新,以便下次第一次从数据库中获取,然后将其存储在缓存中并从缓存中获取。