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. 测试

@SpringBootTest
class SpringbootTestApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testRedis(){
        // 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
@Data
public class People {
    private String name;
    private Integer age;
}

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

@SpringBootTest
class SpringbootTestApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testRedis2(){
        People people = new People("张三", 18);
        redisTemplate.opsForValue().set("people", people);
        System.out.println(redisTemplate.opsForValue().get("people"));
    }
    
}

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

@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
public class People implements Serializable {
    private String name;
    private Integer age;
}

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

自定义redisTemplate

@Configuration
public class RedisConfig {

    //自定义redisTemplate
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);

        // 使用StringRedisSerializer来序列化和反序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        // 使用Jackson2JsonRedisSerializer来序列化和反序列化
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        // 设置对象映射器的可见性,使所有属性都可以被序列化和反序列化
        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配置
bind 127.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值