编辑配置文件 redis.proper
阐明:因为该配置被其余的我的项目独特应用,则应该写到common中。
编辑配置类
阐明:编辑redis配置类,将Jedis对象交给Spring容器进行治理。
@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class JedisConfig {
@Value("${redis.host}")
private String host;
@Value("${redis.port}")
private Integer port;
@Bean
public Jedis jedis(){
return new Jedis(host,port);
}
}
对象与JSON转化(ObjectMapper介绍)
简略对象转化
/**
* 测试简略对象的转化
*/
@Test
public void test01() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
ItemDesc itemDesc = new ItemDesc();
itemDesc.setItemId(100L).setItemDesc("商品详情信息")
.setCreated(new Date()).setUpdated(new Date());
//对象转化为json
String json = objectMapper.writeValueAsString(itemDesc);
System.out.println(json);
//json转化为对象
ItemDesc itemDesc2 = objectMapper.readValue(json, ItemDesc.class);
System.out.println(itemDesc2.getItemDesc());
}
汇合对象转化
//测试汇合对象的转化
@Test
public void testJson01() throws JsonProcessingException {
ObjectMapper objectMapper=new ObjectMapper();
ItemDesc itemDesc1=new ItemDesc();
itemDesc1.setItemId(100L).setItemDesc("商品信息详情1")
.setCreated(new Date()).setUpdated(new Date());
ItemDesc itemDesc2=new ItemDesc();
itemDesc2.setItemId(100L).setItemDesc("商品信息详情2")
.setCreated(new Date()).setUpdated(new Date());
List<ItemDesc> list=new ArrayList<>();
list.add(itemDesc1);
list.add(itemDesc2);
//将汇合对象转化为json格局
String json = objectMapper.writeValueAsString(list);
System.out.println(json);//[{"created":1604828831646,"updated":1604828831646,"itemId":100,"itemDesc":"商品信息详情1"},{"created":1604828831646,"updated":1604828831646,"itemId":100,"itemDesc":"商品信息详情2"}]
//将json格局串转化为汇合对象
List list1 = objectMapper.readValue(json, list.getClass());
System.out.println(list1);//[{created=1604828831646, updated=1604828831646, itemId=100, itemDesc=商品信息详情1}, {created=1604828831646, updated=1604828831646, itemId=100, itemDesc=商品信息详情2}]
}
}
编辑工具API
public class ObjectMapperUtil {
/**
* 1.将用户传递的数据转化为json
* 2.将用户传递的json转化为对象
*/
private static final ObjectMapper MAPPER=new ObjectMapper();
//1.将用户传递的数据转化为json
public static String toJson(Object object){
if(object==null){
throw new RuntimeException("传递的数据不能为空,请查看");
}
try {
return MAPPER.writeValueAsString(object);
} catch (JsonProcessingException e) {
//将查看异样转化为运行时异样
e.printStackTrace();
throw new RuntimeException(e);
}
}
//2.将用户传递的json转化为对象
//需要:要求用户传递什么样的类型,就返回什么样的对象(使用泛型的常识)
public static <T> T toObj(String json,Class<T> target){
if(StringUtils.isEmpty(json)||target==null)
throw new RuntimeException("参数不能为空");
try {
return MAPPER.readValue(json, target);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
商品分类的缓存实现
实现步骤
1.定义Redis中的key。key必须惟一不能反复,设计到存和取。【格局应该是:key=”ITEM_CAT_PARENTID::70″】
2.依据key去redis中进行查问数据(有数据|没有数据)。
3.没有数据则查询数据库获取巨鹿并将查问进去的数据保留到redis中,不便后续应用。
4.有数据表示用户不是第一次查问,能够将缓存数据间接返回即可。
编辑ItemCatController
编辑ItemCatService
/**
* 1.定义Redis中的key,
* 这里的key要求惟一还不能反复,波及到存和取
* key="ITEM_CAT_PARENTID::"+parentId;
* 2.依据key去redis中进行查问 要么有数据 要么没有数据
* 3.如果没有数据则查询数据库获取记录,之后将数据保留在redis中,不便后续应用
* 4.如果有数据则示意用户不是第一次查问,能够将缓存数据也间接返回即可
*
*/@Override
public List<EasyUITree> findItemCatListCache(Long parentId) {
//定义一个公共的返回值对象
List<EasyUITree> treeList=new ArrayList<>();
//1.定义Redis中的key,
String key="ITEM_CAT_PARENTID::"+parentId;
//测试redis中的执行工夫和查询数据库的工夫
Long startTime= System.currentTimeMillis();
//检索redis中的key是否存在
if(jedis.exists(key)){
//数据存在
String json=jedis.get(key);
//须要将json串转化为对象,并将转化后的对象存入treeList
treeList= ObjectMapperUtil.toObj(json, treeList.getClass());
Long endTime= System.currentTimeMillis();
System.out.println("redis执行工夫"+(endTime-startTime));
}else{
//数据不存在 则调用下面的查询方法在数据库中查问数据
treeList= findItemCatList(parentId);
//将数据保留到缓存中,以便后续查问不便
String json = ObjectMapperUtil.toJson(treeList);
jedis.set(key,json);
Long endTime= System.currentTimeMillis();
System.out.println("数据库查问执行工夫"+(endTime-startTime));
}
return treeList;
}
应用redis的速度差
发表回复