redis 如何保证数据同步(数据变化时)
思路
1.新增、删除和修改都先对数据库进行操作,这时数据库的数据将域缓存中数据不同。
2.数据库进行变动后,返回结果,根据返回的结果判断数据库操作是否成功。
3.如果数据库操作成功,取出数据库中的数据,放入缓存中的指定键值对中。
4.否则返回缓存中的数据,显示到页面上。
测试
删除操作
//删除数据库数据,并且同步到缓存
@RequestMapping("DeleteData/{id}")
public List<Article> DeleteData(@PathVariable("id") int id) {
//1.需要先删除数据库中的文件
int dta = articleService.deleteData(id);
//2.如果删除成功,则取出数据库数据放进缓存中,放回缓存中的新数据
if (dta > 0) {
List<Article> articles = articleService.getArticles();
redisTemplate.opsForValue().set("articleData", articles);
}
//3.如果删除不成功,则直接返回缓存中的数据
return (List<Article>) redisTemplate.opsForValue().get("articleData");
}
新增操作
//新增数据,并同步到缓存
@RequestMapping("interData")
public List<Article> interData() {
//1.新增数据到数据库
int i = articleService.interData();
//2.如果成功,则将其放入
if (i > 0) {
List<Article> articles = articleService.getArticles();
redisTemplate.opsForValue().set("articleData", articles);
}
//3.如果不成功,就返回缓存的
return (List<Article>) redisTemplate.opsForValue().get("articleData");
}
修改操作
//修改数据,并同步到缓存
@RequestMapping("updateData/{id}")
public List<Article> updateData(@PathVariable("id")int id) {
//1.新增数据到数据库
int i = articleService.updateData(id);
//2.如果成功,则将其放入
if (i > 0) {
List<Article> articles = articleService.getArticles();
redisTemplate.opsForValue().set("articleData", articles);
}
//3.如果不成功,就返回缓存的
return (List<Article>) redisTemplate.opsForValue().get("articleData");
}