Java教程

基于SpringBoot进行Redis整合

本文主要是介绍基于SpringBoot进行Redis整合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、Redis的安装与配置

1、基本描述

(1)定义

    Redis是一个典型的非关系型数据库,可以作为消息中间件使用。

(2)版本

    6.2.6

2、安装与配置

 1 //安装
 2 1.下载  wget http://download.redis.io/redis-stable.tar.gz
 3 2.解压  tar –zxvf redis-stable.tar.gz
 4 3.编译  make
 5 4.安装  make install
 6 5.查看版本  redis-server -v
 7 
 8 //配置
 9 1.在/etc下创建目录redis cd /etc   mkdir redis
10 2.在/var下创建目录redis,以及在redis下创建run、data和log  cd /var   mkdir run data log
11 3.把安装包解压目录里的redis.conf复制到/etc/redis cp redis.conf /etc/redis
12 4.修改redis.conf配置:修改默认端口为6379;修改pid目录为/var/redis/run/redis.pid;修改log目录为/var/redis/log/redis.log;修改数据目录dir为/var/redis/data
13 vi /etc/redis/redis.conf
14 5.启动redis服务
15 redis-server /etc/redis/redis.conf
16 
17 //测试
18 1.连接redis客户端 redis-cli
19 2.创建键值对 set key value
20 3.获取键值对 get key
21 
22 //其它配置(可选)
23 1.redis可直接通过service redis start/stop脚本命令进行redis服务开始/停止
24 把解压包下的utils目录下redis_init_script文件复制到/etc/init.d目录下;
25 mv redis_init_script redis  //文件重命名;
26 修改上面的redis配置文件,把相关的路径更改为正确的即可;
27 使用上述的service命令进行测试
28 2.redis开机自启动
29 chkconfig redis on  //执行此命令即可

3、成果

安装redis成功=>

连接redis客户端并创建键值对=>

启动脚本修改成功=>

4、FAQ(问题集锦)

(1)进行配置第五步,即启动redis服务时一直无响应

原因:redis的运行以console方式

解决方法:需要把redis服务运行改为后台运行,重新编辑redis.conf配置文件,将daemonize no改为daemonize yes,重新启动redis服务即可。

 

二、SpringBoot整合Redis的基本使用

1、整合步骤

 

 1 1、添加Redis相关依赖
 2     <!-- 添加redis依赖 -->
 3     <dependency>
 4       <groupId>org.springframework.boot</groupId>
 5       <artifactId>spring-boot-starter-data-redis</artifactId>
 6     </dependency>
 7     <!--使用lettuce时,需要额外引入commons-pool2依赖包-->
 8     <dependency>
 9       <groupId>org.apache.commons</groupId>
10       <artifactId>commons-pool2</artifactId>
11     </dependency>
12 2、配置Redis连接信息等
13 #redis连接信息配置
14 spring:
15   redis:
16     host: 192.168.157.131
17     port: 6379
18     password:
19     #jedis:
20     #springboot2.0以上的版本默认使用的是lettuce redis客户端,如果想使用jedis客户端,则需把lettuce依赖进行排除以及手动引入jedis依赖
21     lettuce:
22       pool:
23         max-active: 8
24         max-wait: -1
25         max-idle: 500
26         min-idle: 0
27 3、创建Redis配置类
28 @Configuration
29 public class RedisConfig {    //Rdis配置工具,包括序列器配置等
30     @Bean
31     public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
32         RedisTemplate<String,Object> template=new RedisTemplate<>();
33         //关联
34         template.setConnectionFactory(factory);
35         //设置key的序列化器
36         template.setKeySerializer(new StringRedisSerializer());
37         //设置value的序列器
38         template.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
39         return template;
40     }
41 }
42 4、创建测试类
43 @RunWith(SpringRunner.class)
44 @SpringBootTest
45 public class TestRedis1 {   //Redis处理键值对缓存的测试类
46 
47     @Autowired
48     private RedisTemplate<String,String> redisTemplateStr;        //redis存储缓存工具,注入的是StringRedisTemplate实例,@Autowired根据类型寻找Bean
49     //@Resource    未有手动创建配置的RedisTemplate,使用的是自带的默认RedisTemplate
50     @Autowired      //手动配置了RedisConfig之后,在spring上下文就存在了RedisTemplate<String,Object>类型的Bean
51     private RedisTemplate<String,Object> redisTemplate;     //注入的是RedisTemplate实例,@Resource根据名称寻找Bean
52 
53     //测试RedisTemplate<String,String>注入StringRedisTemplate下,设置及获取缓存
54     @Test
55     public void testStringRedisTemplate(){
56         set("test1","I‘m an enginer!");
57         get("test1");
58     }
59     //测试RedisTemplate<String,String>注入手动配置RedisTemplate下,设置及获取缓存
60     @Test
61     public void testRedisTemplateObj(){
62         //setRT("test2","I‘m an object!");
63         //getRT("test2");
64         User user=new User();
65         user.setId(1001);
66         user.setName("Zhao Yun");
67         setRT("test3",user);
68         getRT("test3");
69     }
70 
71     //设置缓存
72     public void set(String key,String value){
73          redisTemplateStr.opsForValue().set(key, value);
74          System.out.println("当前存储键值对为=>key="+key+",value="+value);
75     }
76 
77     //获取缓存
78     public void get(String key){
79         System.out.println("key="+key+",value="+redisTemplateStr.opsForValue().get(key));
80     }
81 
82     //设置缓存
83     public void setRT(String key,Object value){
84         redisTemplate.opsForValue().set(key, value);
85         System.out.println("当前存储键值对为=>key="+key+",value="+value);
86     }
87 
88     //获取缓存
89     public void getRT(String key){
90         System.out.println("key="+key+",value="+redisTemplate.opsForValue().get(key));
91     }
92 }

 

2、成果

 

//springboot整合redis进行缓存处理成功!!恭喜恭喜!!(使用lettuce客户端以及StringRedisTemplate实例注入以及StringRedisSerializer序列化器)

 

//springboot整合redis进行缓存处理成功!!恭喜恭喜!!(使用lettuce客户端以及RedisTemplate实例注入以及默认JdkSerializationRedisSerializer序列化器=>通过配置改造为了Jackson2JsonRedisSerializer即转换为了json串)

 

 

 

 

 

3、FAQ(问题集锦)

 

1、添加完redis依赖后,进行maven reload时,所有的其它依赖都不见了?

 

 

原因:引入redis依赖出错导致的(把它删除掉重新reload就恢复正常了)

 

解决方法:把依赖spring-boot-starter-redis改为spring-boot-starter-data-redis重新进行maven reload即可

 

2、虚拟机能ping通本地windows,但是windows ping不通虚拟机?(起源为secureCRT连接虚拟机失败,Redis访问也是失败)?

 

原因:虚拟机的桥接方式配置错误

 

解决方法:虚拟机->编辑->虚拟网络编辑器->更改设置,按下面的图示更改网络类型然后重启虚拟机即可

 

 

 

 

注:如果上述方法不行,就使用NAT网络模式,基于主机的VMnet8网络进行通信,重启后再确定网络是否正常?如果想进行静态ip设置,请参考链接:https://blog.csdn.net/huanghuang777/article/details/11891555

 

3、运行test方法后,出现"org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to"?

 

原因:配置redis服务的时候绑定了本地以及开启了保护模式

 

解决方法:注释掉bind这条语句,把protected-mode改为no,最后记得重启redis即可

 

 

4、运行test方法后,出现"Error creating bean with name 'redisConnectionFactory' defined in class path resource.....nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig"?

 

原因:使用lettuce这个Redis客户端时,需要额外引入commons-pool2依赖

 

解决方法:

 

<!--使用lettuce时,需要额外引入commons-pool2依赖包-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
    </dependency>

 

5、运行test方法后,出现”Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException:“?

 

原因:redis服务未启动

 

解决方法:重启redis服务即可,即先stop后start

 

 

6、”org.springframework.data.redis.serializer.SerializationException: Cannot serialize; “?

 

原因:缓存的对象是需要进行序列化后才能存储,实体未进行序列化

 

解决方法:实体类实现Serialize接口即可

 

这篇关于基于SpringBoot进行Redis整合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!