@Servicepublic class DeptService { @Autowired DepartmentMapper departmentMapper; @Qualifier("deptCacheManager") @Autowired RedisCacheManager deptCacheManager; /** * 缓存的数据能存入redis; * 第二次从缓存中查询就不能反序列化回来; * 存的是dept的json数据;CacheManager默认使用RedisTemplate 操作Redis * * * @param id * @return */// @Cacheable(cacheNames = "dept",cacheManager = "deptCacheManager")// public Department getDeptById(Integer id){// System.out.println("查询部门"+id);// Department department = departmentMapper.getDeptById(id);// return department;// } // 使用缓存管理器得到缓存,进行api调用 public Department getDeptById(Integer id){ System.out.println("查询部门"+id); Department department = departmentMapper.getDeptById(id); //获取某个缓存 Cache dept = deptCacheManager.getCache("dept"); dept.put("dept:1",department); return department; }}
Mapper层:
@Mapperpublic interface EmployeeMapper { @Select("SELECT * FROM employee WHERE id = #{id}") public Employee getEmpById(Integer id); @Update("UPDATE employee SET lastName=#{lastName},email=#{email},gender=#{gender},d_id=#{dId} WHERE id=#{id}") public void updateEmp(Employee employee); @Delete("DELETE FROM employee WHERE id=#{id}") public void deleteEmpById(Integer id); @Insert("INSERT INTO employee(lastName,email,gender,d_id) VALUES(#{lastName},#{email},#{gender},#{dId})") public void insertEmployee(Employee employee); @Select("SELECT * FROM employee WHERE lastName = #{lastName}") Employee getEmpByLastName(String lastName);}
@Configurationpublic class MyRedisConfig { @Bean public RedisTemplate empRedisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate template = new RedisTemplate (); template.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer ser = new Jackson2JsonRedisSerializer (Employee.class); template.setDefaultSerializer(ser); return template; } @Bean public RedisTemplate deptRedisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate template = new RedisTemplate (); template.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer ser = new Jackson2JsonRedisSerializer (Department.class); template.setDefaultSerializer(ser); return template; } //CacheManagerCustomizers可以来定制缓存的一些规则 @Primary //将某个缓存管理器作为默认的 @Bean public RedisCacheManager employeeCacheManager(RedisTemplate empRedisTemplate){ RedisCacheManager cacheManager = new RedisCacheManager(empRedisTemplate); //key多了一个前缀 //使用前缀,默认会将CacheName作为key的前缀 cacheManager.setUsePrefix(true); return cacheManager; } @Bean public RedisCacheManager deptCacheManager(RedisTemplate deptRedisTemplate){ RedisCacheManager cacheManager = new RedisCacheManager(deptRedisTemplate); //key多了一个前缀 //使用前缀,默认会将CacheName作为key的前缀 cacheManager.setUsePrefix(true); return cacheManager; }}
注意:
1.当有多个缓存管理器的时候,必须指定一个默认的。@Primary
//CacheManagerCustomizers可以来定制缓存的一些规则 @Primary //将某个缓存管理器作为默认的 @Bean public RedisCacheManager employeeCacheManager(RedisTemplate empRedisTemplate){ RedisCacheManager cacheManager = new RedisCacheManager(empRedisTemplate); //key多了一个前缀 //使用前缀,默认会将CacheName作为key的前缀 cacheManager.setUsePrefix(true); return cacheManager; }
2. 编码的方式使用缓存;
// 使用缓存管理器得到缓存,进行api调用 public Department getDeptById(Integer id){ System.out.println("查询部门"+id); Department department = departmentMapper.getDeptById(id); //获取某个缓存 Cache dept = deptCacheManager.getCache("dept"); dept.put("dept:1",department); return department; }