我正在使用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方法时,我没有得到更新的值。
请告诉我哪里出错了。
答案 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);
}
首先删除现有缓存然后更新,以便下次第一次从数据库中获取,然后将其存储在缓存中并从缓存中获取。