前言

再结合mysqlredis,换句话说,就是在向数据库插入的时候同时向redis中插入一份,那么再次取得时候,我们就可以直接冲redis中去取,这样就大大缓解了mysql的压力。

正文

但是在实际开发的时候,遇到了一个这样的问题,困扰了我很久:
我再serviceImpl中加入了

@Service
public class UserServiceImpl extends ServiceImpl<UserDAO,User> implements UserService{

    @Autowired
    private BaseRedisDao<User> baseRedisDao;

    @Override
    public void saveUserInfo(User user) {
        save(user);
        baseRedisDao.saveWithCache(String.format(RedisKeyPrefix.USER_KEY,user.getId()),user);
    }

    @Override
    public User getUserInfo(String id) {
        User withCache = baseRedisDao.getWithCache(String.format(RedisKeyPrefix.USER_KEY, id));
        if ( withCache == null){
             User user = getById(id);
             if (user == null){
                 return null;
             }
             baseRedisDao.saveWithCache(String.format(RedisKeyPrefix.USER_KEY,user.getId()),user);
             return user;
         }else {
             return withCache;
         }
    }
}

但是,在运行的时候,爆出这样的错误:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

错误的意思大概就是:mybatis没有找到该方法,绑定异常,但是我在想,我这个和mysql也没有关系呀!经过后续的思考我明白了,罪魁祸首原来是:main方法里面的@MapperScan注解,下面贴下我的main方法:

@SpringBootApplication
@MapperScan("com.zzm.demo.dao")
public class RedisDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(RedisDemoApplication.class, args);
    }

}

从这里看到,我之前将整个的dao文件夹都放进了MapperScan里面,但是我的redisDao也在里面,所以这就造成了上面的异常,解决办法:在dao文件夹中,新建两个文件夹mysqlredis,这样区分一下两种dao的形式,并且修改main函数的MapperScan注解,下面贴上我的目录截图:

image.png

这样操作就可以解决问题啦~

结语

Yo~Peace&Love
DragonMing

Q.E.D.


Hello welcome to my blog