创建service测试类
@Service public class CacheService { private Logger log = LoggerFactory.getLogger(CacheService.class); @Autowired private CacheDao cacheDao; @Autowired Cache<String, Object> caffeineCache; /** * 获取用户信息 * @param id 用户ID * @return 用户信息 */ public UserInfo getByName(Integer id) { // 先从缓存读取 caffeineCache.getIfPresent(id); UserInfo userInfo = (UserInfo) caffeineCache.asMap().get(String.valueOf(id)); if (userInfo != null){ return userInfo; } // 如果缓存中不存在,则从库中查找 log.info("get"); UserInfo userInfo = cacheDao.get(id); // 如果用户信息不为空,则加入缓存 if (userInfo != null){ caffeineCache.put(String.valueOf(userInfo.getId()), userInfo); } return userInfo; } /** * 修改用户信息 * @param userInfo 用户信息 * @return 用户信息 */ public UserInfo updateUserInfo(UserInfo userInfo) { log.info("update"); // 取旧的值 UserInfo oldUserInfo = cacheDao.get(userInfo.getId()); if (oldUserInfo == null) { return null; } // 替换内容 if (!StringUtils.isEmpty(oldUserInfo.getAge())) { oldUserInfo.setAge(userInfo.getAge()); } if (!StringUtils.isEmpty(oldUserInfo.getName())) { oldUserInfo.setName(userInfo.getName()); } if (!StringUtils.isEmpty(oldUserInfo.getSex())) { oldUserInfo.setSex(userInfo.getSex()); } // 将新的对象存储,更新旧对象信息 cacheDao.put(userInfo); // 替换缓存中的值 caffeineCache.put(String.valueOf(oldUserInfo.getId()),oldUserInfo); return oldUserInfo; } /** * 删除用户信息 * @param id 用户ID */ public void deleteById(Integer id) { log.info("delete"); cacheDao.remove(id); // 从缓存中删除 caffeineCache.asMap().remove(String.valueOf(id)); } }
创建Dao测试类
public interface CacheDao { @Select("select * from `user_info` WHERE `id` = #{id};") UserInfo get(int id); @Update(" UPDATE `user_info` SET `name` = #{name}, `sex` = #{sex}, `age` = #{age} WHERE `id` = #{id}; ") int put(UserInfo userInfo); @Delete(" delete from `user_info` WHERE `id` = #{id}; ") void remove(Integer id); }
创建Controller测试类
@RestController @RequestMapping("/v1/cache") public class CacheController { @Autowired private CacheService cacheService; @GetMapping("/userInfo/{id}") public Object getUserInfo(@PathVariable Integer id) { UserInfo userInfo = cacheService.getByName(id); if (userInfo == null) { return "没有该用户"; } return userInfo; } @PutMapping("/userInfo") public Object updateUserInfo(@RequestBody UserInfo userInfo) { UserInfo newUserInfo = cacheService.updateUserInfo(userInfo); if (newUserInfo == null){ return "不存在该用户"; } return newUserInfo; } @DeleteMapping("/userInfo/{id}") public Object deleteUserInfo(@PathVariable Integer id) { cacheService.deleteById(id); return "SUCCESS"; } }
新增注解@EnableCaching
@SpringBootApplication @MapperScan("com.example.demo.dao") @EnableCaching public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }创建UserInfo实体类
public class UserInfo { private Integer id; private String name; private String sex; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
创建service类
@Service @CacheConfig(cacheNames = "caffeineCacheManager") public class CacheService { private Logger log = LoggerFactory.getLogger(CacheService.class); @Autowired private CacheDao cacheDao; /** * 获取用户信息 * @param id 用户ID * @return 用户信息 */ @Cacheable(key = "#id") public UserInfo getByName(Integer id) { log.info("get"); UserInfo userInfo = cacheDao.get(id); return userInfo; } /** * 修改用户信息 * @param userInfo 用户信息 * @return 用户信息 */ @CachePut(key = "#userInfo.id") public UserInfo updateUserInfo(UserInfo userInfo) { log.info("update"); // 取旧的值 UserInfo oldUserInfo = cacheDao.get(userInfo.getId()); if (oldUserInfo == null) { return null; } // 替换内容 if (!StringUtils.isEmpty(oldUserInfo.getAge())) { oldUserInfo.setAge(userInfo.getAge()); } if (!StringUtils.isEmpty(oldUserInfo.getName())) { oldUserInfo.setName(userInfo.getName()); } if (!StringUtils.isEmpty(oldUserInfo.getSex())) { oldUserInfo.setSex(userInfo.getSex()); } cacheDao.put(userInfo); return oldUserInfo; } /** * 删除用户信息 * @param id 用户ID */ @CacheEvict(key = "#id") public void deleteById(Integer id) { log.info("delete"); cacheDao.remove(id); } }
创建Dao类
public interface CacheDao { @Select("select * from `user_info` WHERE `id` = #{id};") UserInfo get(int id); @Update(" UPDATE `user_info` SET `name` = #{name}, `sex` = #{sex}, `age` = #{age} WHERE `id` = #{id}; ") int put(UserInfo userInfo); @Delete(" delete from `user_info` WHERE `id` = #{id}; ") void remove(Integer id); }创建Controller测试类
@RestController @RequestMapping("/v1/cache") public class CacheController { @Autowired private CacheService cacheService; @GetMapping("/userInfo/{id}") public Object getUserInfo(@PathVariable Integer id) { UserInfo userInfo = cacheService.getByName(id); if (userInfo == null) { return "没有该用户"; } return userInfo; } @PutMapping("/userInfo") public Object updateUserInfo(@RequestBody UserInfo userInfo) { UserInfo newUserInfo = cacheService.updateUserInfo(userInfo); if (newUserInfo == null){ return "不存在该用户"; } return newUserInfo; } @DeleteMapping("/userInfo/{id}") public Object deleteUserInfo(@PathVariable Integer id) { cacheService.deleteById(id); return "SUCCESS"; } }