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缓存整合结束 -->

打开一个 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 @Bean
6 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 @Service
2 public class UserService {
3 @Autowired
4 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 @RestController
2 public class HelloController {
3 @Autowired
4 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. vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)

    文章很长,建议收藏起来,慢慢读! 备注:持续更新中..... 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 + 涨薪必备 疯 ...

  2. Springcloud 微服务 高并发(实战1):第1版秒杀

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版 ...

  3. Springcloud 配置 | 史上最全,一文全懂

    Springcloud 高并发 配置 (一文全懂) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Spring ...

  4. Springcloud 中 SpringBoot 配置全集 (收藏版)

    Springcloud 中 SpringBoot 配置全集 (收藏版) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群 ...

  5. SpringCloud gateway (史上最全)

    疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 前言 ### 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家 ...

  6. Feign Ribbon Hystrix 三者关系 | 史上最全, 深度解析

    史上最全: Feign Ribbon Hystrix 三者关系 | 深度解析 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 前言 疯狂创客圈(笔者尼恩创建的 ...

  7. 秒懂:tomcat的maxConnections、maxThreads、acceptCount 图解

    后面附图 | 秒懂 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介 ...

  8. 纠错:Feign 没用 短连接

    Feign 默认不是 短连接 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大 ...

  9. JMeter 使用 http长连接 |史上最全

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版本的 高并发秒杀: ...

随机推荐

  1. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-007归并排序(自下而上)

    一. 1. 2. 3. 二.代码 package algorithms.mergesort22; import algorithms.util.StdIn; import algorithms.uti ...

  2. 100725B Banal Tickets

    传送门 题目大意 有2*n个位置,这些位置有的已经填上了数,有的还没有(用?表示),现在让你在还没有填上数的填0~9中的任意数,使得前n个数的乘积等于后n个数的乘积,问有多少种方案. 分析 首先这个题 ...

  3. Luogu 2831 [NOIP2016] 愤怒的小鸟

    第一眼看成爆搜的状压dp,膜Chester大神犇. 考虑到三个不在同一直线上的点可以确定一条抛物线,而固定点$(0, 0)$和不在同一直线上这两个条件是题目中给定的,所以我们只要枚举两个点然后暴力算抛 ...

  4. 树莓派研究笔记(3)-- 安装VNC

    小屏幕太小了,眼睛快看瞎了,必须安装VNC 才行啊. 更新—2018-02-04 最新版本的系统中自带了VNC了,只需要在 菜单 Preferences -> Raspberry Pi Conf ...

  5. 《Effective Java》第5章 泛型

    第23条:请不要在新代码中使用原生态类型 声明中具有一个或者多个类型参数( type parameter)的类或者接口,就是泛型(generic)类或者接口. 每种泛型定义一组参数化的类型(param ...

  6. Grideview总结

    http://www.cnblogs.com/sufei/archive/2010/03/27/1698590.html

  7. C#中IDisposable的用法-垃圾回收

    在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...

  8. mac的idea不能编辑问题

    在安装的时候,因为在选择插件的时候,把IDEAVim这个玩意儿选上了.所以,编辑模式就跟命令行里面的Vim一样.输入时,需要先输入i, 进入insert模式下,然后才可以编辑.彻底解决办法就是进入Pr ...

  9. CHNS类

    NS类集合介绍 1.常用部分 NSDictionary NSString NSArray 数组 NSTimer 定时器 NSRange 范围 NSNotification 2.网络相关 NSURLCo ...

  10. hdu2328(后缀数组 + 二分)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2328 题意: 求 n 个串的字典序最小的最长公共子串 思路: 本题中单个字符串长度不超过 200, ...