0


Spring Boot整合Redis

Spring Boot整合Redis简单示例。

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:6379

3. 测试

@SpringBootTestclassSpringbootTestApplicationTests{@AutowiredprivateRedisTemplate redisTemplate;@TestvoidtestRedis(){// redisTemplate    操作不同的数据类型// opsForValue      操作字符串类型// opsForList       操作列表类型// opsForHash       操作哈希类型// opsForSet        操作集合类型// opsForZSet

        redisTemplate.opsForValue().set("username","zhangsan");System.out.println(redisTemplate.opsForValue().get("username"));//获取redis的连接对象//        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();//        connection.flushDb();}}

打印结果:
在这里插入图片描述
查看redis中的key:
在这里插入图片描述
如上,可以看到 key 和 value 都是一串字符,这是因为默认的序列化方式是JDK序列化。
源码如下:
在这里插入图片描述
在这里插入图片描述
我们可能会使用 json 序列化或者其他序列化方式,所以自定义配置类来设置序列化方式
从 RedisAutoConfiguration 源码中可以看到,自定义了 redisTemplate ,源码中的bean将失效。
在这里插入图片描述
在自定义配置类来设置序列化方式之前,先来测试一下没有序列化会产生什么结果
首先,创建没有序列化的People 类。

@Component@AllArgsConstructor@NoArgsConstructor@DatapublicclassPeople{privateString name;privateInteger age;}

然后,测试set一个对象,会出现报错:序列化异常,无法序列化。

@SpringBootTestclassSpringbootTestApplicationTests{@AutowiredprivateRedisTemplate redisTemplate;@TestvoidtestRedis2(){People people =newPeople("张三",18);
        redisTemplate.opsForValue().set("people", people);System.out.println(redisTemplate.opsForValue().get("people"));}}

打印结果:
在这里插入图片描述
接着,给People类加上序列化。

@Component@AllArgsConstructor@NoArgsConstructor@DatapublicclassPeopleimplementsSerializable{privateString name;privateInteger age;}

最后,可以看到set成功。
打印结果:
在这里插入图片描述
查看redis中的key:
在这里插入图片描述

自定义redisTemplate

@ConfigurationpublicclassRedisConfig{//自定义redisTemplate@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplate<String,Object> template =newRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);// 使用StringRedisSerializer来序列化和反序列化StringRedisSerializer stringRedisSerializer =newStringRedisSerializer();// 使用Jackson2JsonRedisSerializer来序列化和反序列化Jackson2JsonRedisSerializer<Object> serializer =newJackson2JsonRedisSerializer<>(Object.class);ObjectMapper objectMapper =newObjectMapper();// 设置对象映射器的可见性,使所有属性都可以被序列化和反序列化
        objectMapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);// 启用默认类型信息,以便在序列化和反序列化时处理多态情况
        objectMapper.activateDefaultTyping(
                objectMapper.getPolymorphicTypeValidator(),//使用getPolymorphicTypeValidator获取多态类型验证器ObjectMapper.DefaultTyping.NON_FINAL,//设置默认类型检测策略为NON_FINAL,即对非最终类进行类型检测JsonTypeInfo.As.PROPERTY//设置类型信息存储方式为PROPERTY,即将类型信息作为属性存储在JSON中);
        serializer.setObjectMapper(objectMapper);// 配置key和value的序列化模式
        template.setKeySerializer(stringRedisSerializer);
        template.setValueSerializer(serializer);// 配置hash key和hash value的序列化模式
        template.setHashKeySerializer(stringRedisSerializer);
        template.setHashValueSerializer(serializer);
        template.afterPropertiesSet();return template;}}

重新执行测试方法,查看redis中的key:
在这里插入图片描述

4. 连接远程服务器上的redis

以阿里云服务器为例,连接远程服务器上的redis,步骤如下:

1. 设置服务器上redis配置
bind127.0.0.1        #绑定ip
protected-mode yes#保护模式

bind 默认是所有可用,可以看到配置文件是注释掉的。
bind 127.0.0.1 只能在本地访问,想要远程访问可以如下3种方式,任选一种。
1、#bind 127.0.0.1 (注释掉bind,默认所有可用。)
2、bind * -:😗 (使用 * 通配,像默认一样,所有可用。)
3、bind 访问端的本机IP(绑定访问端的本机IP,只有这个IP可以访问。想要知道自己电脑的本机IP可以在百度搜索IP,可以看到“IP查询”->“本机IP”。)
在这里插入图片描述

2. 设置云服务器安全组

在安全组中添加入方向和出方向规则,开放redis的6379端口。
在这里插入图片描述

3. 设置云服务器防火墙

防火墙开放端口6379。

firewall-cmd --zone=public --add-port=6379/tcp --permanent
#使更改生效
firewall-cmd --reload
4. 测试
  • telnet 服务器IP 6379 (确保远程redis服务端已启动,端口6379被监听)在这里插入图片描述
  • 使用本地redis客户端连接远程redis服务端在这里插入图片描述 至此,测试连接成功。
5. 程序测试

修改配置连接

spring:redis:host: 服务器IP
    port:6379

启动测试方法testRedis2。
执行成功,打印结果:
在这里插入图片描述
查看服务器上的redis中的key:
在这里插入图片描述
如何在Linux系统上安装Redis,请查看Linux上安装Redis。


本文转载自: https://blog.csdn.net/cy1576084996/article/details/141730780
版权归原作者 洱海映苍山 所有, 如有侵权,请联系我们删除。

“Spring Boot整合Redis”的评论:

还没有评论