首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot集成Redis

Spring Boot集成Redis

作者头像
每天学Java
发布2020-06-01 17:34:42
1.3K0
发布2020-06-01 17:34:42
举报
文章被收录于专栏:每天学Java每天学Java

在昨天我们讲解了如何在Linux上部署Redis,那么今天我们来看一看Spring Boot如何集成Redis。

安装Redis是我们学习它的第一步,当我们安装好之后就要开始学习如何在项目中去使用它。

01

Spring Boot集成

首先是导入依赖:

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

加载成功后我们首先去测试一下:

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void set() {
        Object x = redisTemplate.opsForValue().get("studyJava");
    System.out.println(x);
    }   

上面studyJava是我们上节安装后通过redis-cli存储的一个key,但是测试发现会报错。

报错为连接失败,但是服务器内部是可以进行访问,这也就是不能外网访问。遇到这种情况,要么就是防火墙,要么就是redis的配置文件。在我的服务器上,我并没有开启防火墙,那么肯定是配置文件有问题来。

在redis的目录下面,有一个redis.conf配置文件,这里面我们需要修改两个东西:

1.将protected-mode yes改为protected-mode no。也就是关闭保护模式

2.将bind 127.0.0.1 注释掉。

但是我建议在正式环境上将他们开启。防止被黑。在今天早上我就发现,我的redis出现了问题:

疑似被黑了,我的处理方式:首先要将这些key清除掉(使用flushall命令)。然后将redis改成密码连接,设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass" 设置复杂密码 (需要重启Redis服务才能生效)。

加密后Spring Boot的配置文件该如何写呢?

#redis
spring.redis.host=服务器外网地址
spring.redis.port=6379
spring.redis.password=个人设置的密码
#最大连接数
spring.redis.jedis.pool.max-active= 8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=10000

好了说完这些,我们来看一下实际的效果吧。

02

获取Redis数据

在单元测试中,虽然跑通了,但是获取的key对应的value总是为null。

我们来服务器中看一下

明明是有值的,为什么我的项目中获取不到呢?很简单,我们通过项目set一个值进去,然后看看效果

你没看错,我们set进去是这样的key,这是什么问题呢?这是因为RedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的

那如果你不能接受这种方式,那么如何处理呢?其实很简单,更改序列化,在启动类加入下面的代码。

   @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        // 设置value的序列化规则和 key的序列化规则
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }    

这样便解决了序列化的问题。

到目前为止,我们已经成功的将Redis集成到我们的项目中了,那么通过这篇文章我们能够收获到什么呢?

1.为什么项目不能连接到Redis服务器

2.不开启保护策略有什么危害

3.如何预防redis被攻击

4.RedisTemplate的序列化对我们直接操作Redis有什么影响


跟小伙伴们分享一下这个周末的推送安排,大家可以重点关注自己喜欢的文章:

九月15号周六:Linux部署Redis(单机版)

九月16号周日:Spring Boot集成Redis

那么今天小程序更新的题库是什么呢?

今天小程序更新的题目是:

1.预防Redis服务器被攻击的措施有哪些

2.为什么redis需要把所有数据放到内存中?

3.Redis是单进程单线程的?

4.Redis中一个字符串类型的值能存储最大容量是多少?

5.Redis的同步机制了解么?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档