redis①是一种nosql数据库,以键值对<key,value>的形式存储数据,其速度相比于MySQL之类的数据库,相当于内存读写与硬盘读写的差别,所以常常用作缓存,用于少写多读的场景下,直接从缓存拿数据比从数据库(数据库要I/O操作)拿要快得多。


  话不多说,接下来紧接上一章《SpringCloud+MyBatis+Redis整合—— 超详细实例(一)》搭建SpringCloud+MyBatis+Redis环境:

  • 第一步:在pom.xml文件中添加

1       <!-- Redis缓存整合开始 -->
2         <dependency>
3             <groupId>org.springframework.boot</groupId>
4             <artifactId>spring-boot-starter-data-redis</artifactId>
5         </dependency>
6         <!-- Redis缓存整合结束 -->

  • 第二步:下载Windows版Redis  https://github.com/MSOpenTech/redis/releases

打开一个 cmd 窗口 使用cd命令切换目录到  F:\dev-space\workspaces\newPlatform-2018\RedisForWindow  运行 redis-server.exe redis.windows.conf 。(放文件的实际路径)

  • 第三步:创建RedisConfig配置类,相当于在xml文件中的bean

 1 @Configuration

 2 @EnableCaching

 3 public class RedisConfig extends CachingConfigurerSupport {4 5     @Bean6     public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {7         RedisCacheManager rm = new RedisCacheManager(redisTemplate);8         rm.setDefaultExpiration(30l);// 设置缓存时间9         return rm;
10     }
11
12     @Bean
13     public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
14         StringRedisTemplate template = new StringRedisTemplate(factory);
15         @SuppressWarnings({ "rawtypes", "unchecked" })
16         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
17         ObjectMapper om = new ObjectMapper();
18         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
19         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
20         jackson2JsonRedisSerializer.setObjectMapper(om);
21         template.setValueSerializer(jackson2JsonRedisSerializer);
22         template.afterPropertiesSet();
23         return template;
24     }
25 //    @Bean
26 //    public JedisConnectionFactory redisConnectionFactory() {
27 //      JedisConnectionFactory factory = new JedisConnectionFactory();
28 //      factory.setHostName(host);
29 //      factory.setPort(port);
30 //      factory.setPassword(password);
31 //      factory.setTimeout(timeout); //设置连接超时时间
32 //      return factory;
33 //    }                             不配置端口默认为6379
34 }

  • 第四步:改造controller类,新增Service类让方法拥有Redis缓存

 1 @Service2 public class UserService {3     @Autowired4     private UserMapper userMapper;5     6     @Cacheable(value="user", key="'user'")

 7     public User selectByPrimaryKey(Integer id) {8         System.out.println("开始查询.....");9         try {
10             Thread.sleep(3 * 1000l);
11         } catch (InterruptedException e) {
12             e.printStackTrace();
13         }
14         System.out.println("查询结束......");
15         User user=userMapper.selectByPrimaryKey(id);
16
17         return user;
18     }
19
20 }

 1 @RestController2 public class HelloController {3     @Autowired4     private UserService userService;5     6     @RequestMapping("/hello")7     public String index() {8         long beginTime=System.currentTimeMillis();9         User  user = userService.selectByPrimaryKey(1);
10         long time=System.currentTimeMillis()-beginTime;
11         return "Hello SpringBoot"+user.getName()+",消耗查询时间:"+time;
12
13     }
14
15
16 }

  • 第五步:在页面输入http://127.0.0.1:1111/hello,第一次可以看到通过查询并延迟三秒

当第二次输入后,该查询会从Redis缓存中获取,所以时间没有延迟三秒,并且非常迅速

从cmd中  该目录下输入 redis-cli       get user得到:

说明该对象以存入Redis缓存当中。

至此,SpringCloud+MyBats+Redis搭建成功!

项目完整代码见https://github.com/Adosker/hello


注释一:Redis:属于独立的运行程序,需要单独安装后,使用Java中的Jedis来操纵。因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的。
    ehcache:与Redis明显不同,它与java程序是绑在一起的,java程序活着,它就活着。譬如,写一个独立程序放数据,再写一个独立程序拿数据,那么是拿不到数据的。只能在独立程序中才能拿到数据。

注释二:从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。

Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:

1、@Configuration 作用于类上,相当于一个xml配置文件;

2、@Bean 作用于方法上,相当于xml配置中的<bean>;

注释三:@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。

当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理,等同于XML文件中配置<cache:annotation-driven/>。

注释四:@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法

SpringCloud+Redis相关推荐

  1. 基于人工智能的智慧校园助手(springboot+springcloud+redis+vue+vant ui+element ui+mysql+Elasticsearch+RabbitMQ项目)

    部分功能演示地址 由于录视频时还没开发完,只有部分功能展示. 第一章 需求分析 学校是促进社会发展和个体发展的主要载体,随着信息化趋势的不断加强,信息技术越来越深度地融入高校的教育.教学及校园生活之中 ...

  2. SpringCLoud+redis+es高并发项目《四》

    第4章 lua.Canal实现广告缓存 学习目标 Lua介绍 Lua语法 输出.变量定义.数据类型.流程控制(if..).循环操作.函数.表(数组).模块 OpenResty介绍(理解配置) 封装了N ...

  3. SpringCloud——Redis的使用

    使用微服务的时候将一些经常使用的数据存放在Redis中来减少对数据库的访问并提高性能 1.在pom文件中导入Redis依赖包 <dependency><groupId>org. ...

  4. SpringCLoud+redis+es高并发项目《一》

    第1章 框架搭建 学习目标 了解电商 1.市场走向 2.技术特点 了解畅购架构 1.微服务架构 2.各个服务调用 3.各个服务公共组件抽取 了解畅购工程结构[重点] 1.业务独立工程 2.公共抽取 3 ...

  5. 分布式架构springmvc+springboot+springcloud+redis

    内容管理(CMS)系统,包括内容管理,栏目管理.站点管理.公共留言.文件管理.前端网站展示等功能: 在线办公(OA)系统,主要提供简单的流程实例. 提供了常用工具进行封装,包括日志工具.缓存工具.服务 ...

  6. 分布式架构 springcloud+redis+springmvc+ springboot

    内容管理(CMS)系统,包括内容管理,栏目管理.站点管理.公共留言.文件管理.前端网站展示等功能: 在线办公(OA)系统,主要提供简单的流程实例. 提供了常用工具进行封装,包括日志工具.缓存工具.服务 ...

  7. SpringCloud + Redis + RabbitMQ + ES + Docker + React 模仿B站视频网站

    *主要完成的功能有 图片上传(以本地为主,因为不想买服务器),视频上传(以本地为主,因为不想买服务器),评论,点赞,评论点赞,多级评论,历史记录,关注用户,以及被关注,分类上传,分类处理,用户登录(验 ...

  8. 基于SpringCloud+redis+Springsecurity实现的微信小程序外卖系统

    文章目录 一.项目介绍 二.技术栈以及项目特点 三.数据库表设计 四.系统设计 五.系统功能演示

  9. SpringCloud gateway (史上最全)

    前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版本的 高并发秒杀: 一.版本1 :springcloud + zookeeper 秒杀 二.版 ...

最新文章

  1. python数据结构与算法:双向链表
  2. 山东省百万奖金赛事来了!
  3. EM12C监控遇到 ‘cursor: pin S wait on X’ waits.
  4. scrapy爬虫,爬取图片
  5. 自动完形填空系统构建
  6. Drools学习 入门实例
  7. 声压级 matlab,语音信号处理教程(二)声音的声压级和响度
  8. 广义表头尾链表存储结构_详解Redis五种数据结构的底层原理
  9. 有哪些值得推荐的 Java 练手项目?
  10. Mac 使用rz sz 命令
  11. css垂直居中怎么设?文字上下居中和图片垂直居中
  12. SpringMVC+vue实现前后端分离的旅游管理系统
  13. 5月2日云栖精选夜读:DT科技评论第35期:可以解锁任何手机的万能指纹
  14. 大连海事大学计算机20考研(计算机应用 技术)专硕410+经验贴
  15. 创建一个Android Cardboard 360 Video Viewer
  16. 了解什么是用户留存率
  17. 在Xcode 中如何打包测试版 给测试工程师使用
  18. 非常nb的类excel js控件:treegrid
  19. 虚拟机与Linux的安装
  20. 转载 科大讯飞jh再裁员 员工称公司管理混乱、产品质量差

热门文章

  1. 腾讯内容开放平台:将重拳打击盗号 严重违法行为将报送国家执法部门
  2. 安卓APP测试知识大全【面试储备】
  3. Python常用图像处理
  4. 后端的日期类型赋值前端表单_Spring Boot实践--前端字符串日期自动转换成后台date类型。...
  5. Fast-SCNN 多分支结构共享低级特征的语义分割网络 (一)
  6. python实现解析oui.txt并抽取MAC前缀及组织名称
  7. windows上使用Git bash详细图文教程
  8. php与drupal,php-将网站转换为Drupal-噩梦已经开始
  9. php7扩展开发教程,Laravel 7 扩展开发教程
  10. 【kafka】Kafka消息压缩与解压与相关实验