工程架构:
POM中添加缓存依赖包
<!-- spring-boot-starter-cache 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
主要是Service接口
public City findCityName(String cityName);
// 添加
void add(City city);
// 修改
void update(String cityName, String description);
(2)实现的接口的类
@Service
public class CityServiceImpl implements CityService {
// 模拟数据库存储
private Map<String, City> maps = new HashMap<String, City>();
/**
* 查找
*/
@Override
@Cacheable(value="baseCityInfo")
//调用这个方法,会从baseCityInfo的名称缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,
//否则返回缓存中的对象
public City findCityName(String cityName) {
// 模拟数据库查询并返回
return maps.get(cityName);
}
/**
* 添加
*/
@Override
public void add(City city) {
// TODO Auto-generated method stub
maps.put(city.getCityName(), city);
}
/**
* 更新
*/
@Override
@CachePut(value="baseCityInfo")
//确保方法被执行,同时方法的返回值也被记录到缓存中,实现缓存与数据库的同步更新。
public void update(String cityName, String description) {
// 获得城市
City city = maps.get(cityName);
// 设置描述
city.setDescription(description);
// 保存到数据中
maps.put(cityName, city);
}
}
其他部分的配置文件,启动类忽略
测试类
@RunWith(SpringRunner.class)
// run
@SpringBootTest
// springboot test
public class TestApplication {
// 日志对象
private static final Logger LOGGER = LoggerFactory
.getLogger(CityServiceImpl.class);
// 注入接口
@Autowired
public CityService cityService;
/**
* 添加
*/
@Test
public void testAdd() {
// 城市对象
City city = new City(8L, 10L, "上海", "人称魔都的地方");
// 添加=> 向 redis 中存入数据
cityService.add(city);
// 从 redis 中取数据
City citys = cityService.findCityName("上海");
// 日志跟踪
LOGGER.info(citys.toString());
}
/**
* 更新
*/
@Test
public void testUpdate() {
// 城市对象
City city = new City(9L, 20L, "北京", "中国帝都");
// 添加=> 向 redis 中存入数据
cityService.add(city);
// 从 redis 中取数据, 第一次查询
City citys = cityService.findCityName("北京");
// 日志跟踪
LOGGER.info("first find BJ=>" + citys.toString());
// 从 redis 中取数据, 第一次查询
citys = cityService.findCityName("北京");
// 日志跟踪
LOGGER.info("second find BJ=>" + citys.toString());
// 更新 city 的描述信息后查询
cityService.update("北京", "很想去北京玩玩!");
citys = cityService.findCityName("北京");
// 日志跟踪
LOGGER.info("update after BJ=>" + citys.toString());
}
}
效果
1)执行添加方法
2)执行修改方法
https://github.com/yuanhangs/bearDay