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。
版权归原作者 洱海映苍山 所有, 如有侵权,请联系我们删除。