以获取店铺类型列表为例:
public List<ShopType> queryTypeList() {
// 1、构建key
String key = "cache:shopType:list";
// 2、判断缓存是否命中
List<String> shopTypeList = stringRedisTemplate.opsForList().range(key, 0, -1);
List<ShopType> shopTypesByRedis = new ArrayList<>();
if (shopTypeList != null && shopTypeList.size() > 0) {
// 3、命中,将JSON数据转换成对象
for (String shopType : shopTypeList) {
ShopType type = JSONUtil.toBean(shopType, ShopType.class);
shopTypesByRedis.add(type);
}
return shopTypesByRedis;
}
// 4、未命中,从数据库查询
List<ShopType> shopTypeListMysql = query().orderByAsc("sort").list();
// 5、将查询结果写入缓存
if(shopTypeListMysql != null) {
for (ShopType shopType : shopTypeListMysql) {
stringRedisTemplate.opsForList().rightPushAll(key, JSONUtil.toJsonStr(shopType));
}
} else {
return null;
}
return shopTypeListMysql;
}