SpringBoot整合Redis

小飞 2020-11-09 22:19:51
java SpringBoot redis SegmentFault 整合


编辑配置文件 redis.proper

说明:由于该配置被其他的项目共同使用,则应该写到common中。
image.png

编辑配置类

说明:编辑redis配置类,将Jedis对象交给Spring容器进行管理。
image.png

@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

image.png

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

image.png

编辑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的速度差

image.png

版权声明
本文为[小飞]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000037778207

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云