SpringBoot整合Redis

在SpringBoot中一般使用RedisTemplate提供的方法来操作Redis。那么使用SpringBoot整合Redis
需要那些步骤呢。

  • 1.JedisPoolConfig(这个是配置连接池)

  • 2.RedisConnectionFactory(这个是配置连接信息,这里的RedisConnectionFactory是一个接口,
    我们需要使用它的实现类,在SpringD Data Redis方案中提供了一下四种工厂模型)

    • JredisConnectionFactory
    • JedisConnectionFactory
    • LettuceConnectionFactory
    • SrpConnectionFactory
  • 3.RedisTemplate

1、添加启动器

<!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2、配置连接信息

spring:redis:host: 127.0.0.1 port: 6379password: 123456jedis:pool:max-active: 8max-wait: -1max-idle: 500min-idle: 0lettuce:shutdown-timeout: 0

3、测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class Test_1{@Autowiredprivate RedisTemplate<String,String>redisTemplate;@Testpublic void set(){redisTemplate.opsForValue().set("myKey","myValue");System.out.println(redisTemplate.opsForValue().get("myKey"));}
}

4、查看结果

5、序列化器

这里先说一下Spring提供了那些序列化器(各自作用自行百度,这里不再赘述)
Jackson2JsonRedisSerializer
JdkSerializationRedisSerializer
OxmSerializer
StringRedisSerializer
GenericToStringRedisSerializer
GenericJackson2JsonRedisSerializer

然后以下是一些问题需要搞清楚

  • 为什么需要序列化?
    你要记住一句话,在JAVA中,一切皆对象,而将对象的状态信息转为存储或传输的形式需要序列化。

  • 为什么前面的代码没有设置序列化?
    原因是是因为我们使用了@AutoWired,IOC容器为我们选择了StringRedisTemplate类来注入
    以下是单步调试的截图

    这里是RedisTemplate的继承关系图

    然后我们跟踪源码可以发现
    StringRedisTemplate.java

 public StringRedisTemplate() {setKeySerializer(RedisSerializer.string());setValueSerializer(RedisSerializer.string());setHashKeySerializer(RedisSerializer.string());setHashValueSerializer(RedisSerializer.string());}

RedisSerializer.java

static RedisSerializer<String> string() {return StringRedisSerializer.UTF_8;}

StringRedisSerializer.java

public static final StringRedisSerializer UTF_8 = new StringRedisSerializer(StandardCharsets.UTF_8);

StringRedisTemplate默认选择的StringRedisSerializer序列化器

  • 那假如我们把Value的类型改为Object呢
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test_1{@Resourceprivate RedisTemplate<String,Object>redisTemplate;@Testpublic void set(){redisTemplate.opsForValue().set("myKey","myValue");System.out.println(redisTemplate.opsForValue().get("myKey"));}
}

注意:这里继续使用@AutoWired会报错,需要使用@Resource,这两个注解的区别在前者是根据类型后者
是根据名字,具体区别自行查资料(这里说一下为什么会报错:@AutoWired找不到该类型
<String,Object>的Bean因为根本没有。使用@Resource直接注入的是RedisTemplate)


然后运行代码,我们去看RedisManeger

咦?怎么会这样?
这是因为没有设置序列化器,RedisTemplate选择了默认的序列化器JdkSerializationRedisSerializer
官方文档是这样说的:
RedisTemplate (Spring Data Redis 2.1.4.RELEASE API)

Performs automatic serialization/deserialization between the given objects and
the underlying binary data in the Redis store. By default, it uses Java serialization
for its objects (through JdkSerializationRedisSerializer ).
For String intensive operations consider the dedicated StringRedisTemplate.

6、配置序列化器

说了这么多,那么我们如何自己设置序列化器呢,方法有很多种,比如比较简单的就是
方法1

@RunWith(SpringRunner.class)
@SpringBootTest
public class Test_1{@Resourceprivate RedisTemplate<String,Object>redisTemplate;@Testpublic void set(){redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setKeySerializer(RedisSerializer.string());//或者//redisTemplate.setKeySerializer(new StringRedisSerializer());//redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.opsForValue().set("myKey","myValue");System.out.println(redisTemplate.opsForValue().get("myKey"));}
}

有的时候每次这样设置比较烦人,那么就采用配置类(更多的时候采用这种方法)
方法2(这样的话,测试类就应该使用@AutoWired了哦)

@Configuration
public class RedisConfig{@Beanpublic RedisTemplate<String,Object>redisTemplate(RedisConnectionFactory factory){RedisTemplate<String,Object>template=new RedisTemplate<>();//关联template.setConnectionFactory(factory);//设置key的序列化器template.setKeySerializer(new StringRedisSerializer());//设置value的序列化器template.setValueSerializer(new StringRedisSerializer());return template;}
}

为什么说更多的时候采用这种方法呢,实际情况中可能有多种需求,泛型各不相同,比如有<String,User>
直接在Config类里面在加一个方法就行。

7、完整例子(将实体类以JSON的形式储存到Redis中)

1、先给出entity(记住实体要序列化一定要实现Serializable接口)

@Data
public class Days implements Serializable {private String openId;private String daysId;//每天的标题private String title;//代办事项的数量private int itemNumber;//日程private String date;
}

2、然后在配置类中设置序列化器

@Configuration
public class RedisConfig{@Beanpublic RedisTemplate<String, Days>redisTemplate(RedisConnectionFactory factory){RedisTemplate<String,Days>template=new RedisTemplate<>();//关联template.setConnectionFactory(factory);//设置key的序列化器template.setKeySerializer(new StringRedisSerializer());//设置value的序列化器template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Days.class));return template;}
}

3、测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {@Autowiredprivate RedisTemplate<String,Days> redisTemplate;private Days d;@Beforepublic void before(){d=new Days();d.setDate("123");d.setDaysId("456");d.setItemNumber(123);d.setOpenId("dawda");d.setTitle("title");}@Testpublic void testSet(){this.redisTemplate.opsForValue().set("days",d);System.out.println((redisTemplate.opsForValue().get("days")));}
}

4、运行结果

很激动有木有!(o)/~

详解SpringBoot整合Redis相关推荐

  1. RedisTemplate操作redis五大类型用法详解(springboot整合redis版本)

    1.案例说明 springboot整合redis之后,提供了操作redis的简便方式 通过通用对象redisTemplate方式操作String,Hash,List,Set SortSet五大数据类型 ...

  2. springboot整合mysql5.7_详解SpringBoot整合MyBatis详细教程

    1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web.JDBC API.MySQL Driver 然后导入以下整合依赖 org.mybatis.spring.boo ...

  3. RabbitMq详解+SpringBoot整合RabbitMq快速入门

    1概述: 1.1.什么是MQ 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已. 其主要用途:不同进程Pro ...

  4. 详解SpringBoot整合Mybatis框架

    文章目录 前言 一.创建SpringBoot项目 二.配置Mybatis 1. 在pom.xml文件中添加jar包依赖 2. SpringBoot整合Mybatis配置文件 三.创建Mapper接口 ...

  5. 2023新版图文详解SpringBoot整合SSM框架(附源码)

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 教程概述 本教程以图文形式详细讲解SpringBoot整合SSM框架的流程以及具体步骤及其注意 ...

  6. java分布式会话redis_详解springboot中redis的使用和分布式session共享问题

    对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomca ...

  7. Mybatis零基础教程,Java访问数据库核心操作,详解Spring-boot整合Mybatis持久层!

    1.前言 持久层是JavaEE中访问数据库的核心操作,Mybatis是一款优秀的持久层框架,诞生于2010年,2013年迁移至Github.它支持定制化 SQL.存储过程以及高级映射.MyBatis ...

  8. 跟着狂神学Redis(NoSql+环境配置+五大数据类型+三种特殊类型+Hyperloglog+Bitmap+事务+Jedis+SpringBoot整合+Redis持久化+...)

    跟着狂神学Redis 狂神聊Redis 学习方式:不是为了面试和工作学习!仅仅是为了兴趣!兴趣才是最好的老师! 基本的理论先学习,然后将知识融汇贯通! 狂神的Redis课程安排: nosql 讲解 阿 ...

  9. Springboot整合redis配置详解

    Springboot整合redis配置详解 1.导入依赖 <dependency><groupId>org.springframework.boot</groupId&g ...

最新文章

  1. 2022,普平数据中心招聘来啦!
  2. C语言const使用
  3. 继BAT之后 第四大巨头是谁
  4. SQL UNION 和 UNION ALL 操作符(mysql)
  5. java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...
  6. Hystrix能解决的问题
  7. 工作10以上老程序员都去哪了?作为新时代的程序员我们该何去何从
  8. SpringBoot邮件服务
  9. Redis笔记 -- 链表和链表节点的API函数(三)
  10. 2019-05-22 SQL注入;啊D注入工具;
  11. 如何解决网上图片模糊不清,还原图片清晰度?
  12. Gym 100015A
  13. C++递归实现栈逆序
  14. MS VC6 链接错误处理
  15. 偷偷看,别让老板发现了...微信如何多开,实现工作号和私人号分离|亲测,win系列所有系统都可以实现
  16. 召回率与精确率的理解
  17. 学会了使用计算机之后作文,我学会了计算机
  18. linux使用usb刻录光驱,linux光驱刻录
  19. ppt转html java_poi ppt转换为html,实现在线预览
  20. Remember Me 功能实现

热门文章

  1. CEO、COO、CFO、CTO 是什么意思
  2. Kafka vs AMQ技术比对
  3. FZU Problem 2238 Daxia Wzc's problem(Lucas定理求组合数)
  4. 关于工业生产中的线圈(定子)瑕疵品分析
  5. Linux常见基础指令详解
  6. BRVAH官方使用指南(持续更新)--BaseRecyclerViewAdapterHelper
  7. Zigbee之旅(八):几个重要的CC2430基础实验——看门狗
  8. Arduino磁悬浮
  9. IC卡ID卡混合型多功能DLC430考勤机门禁一体机安装调试使用说明
  10. 超级计算机的功能是什么,电脑中的王者——超级计算机,你了解多少?