接着上一篇 Redis 2 :springboot 整合 redis 中的代码
代码结构
MemberController:
package com.demo.controller;
import com.demo.entity.MemberEntity;
import com.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class MemberController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/findMemberAll")
@Cacheable( cacheNames = "member", key = "'findMemberAll'")
public List<MemberEntity> findMemberAll(){
List<MemberEntity> memberAll = userMapper.findMemberAll();
return memberAll;
}
}
UserMapper:
package com.demo.mapper;
import com.demo.entity.MemberEntity;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
@Select("select * from users")
List<MemberEntity> findMemberAll();
}
数据库
启动项目
输入网址:127.0.0.1:8080/findMemberAll
查出来的name值是 “zhang”
现在直接修改数据库中name的值为:zhangsan
再次刷新网址:
可以看到 name 的值还是 “zhang”,由于这里是直接从redis中查询出来的,这样就导致了mysql数据库和redis中数据不一致的现象发生了
MySQL与Redis的数据同步的问题如何解决?
方式1 直接清理Redis的缓存,重新查询数据库即可~~
方式2 直接采用mq订阅mysql binlog日志文件增量同步到Redis中,整个过程采用最终一致性方案。
方式3 使用alibaba的canal