前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >七天玩转Redis | Day6、SpringBoot集成Redis

七天玩转Redis | Day6、SpringBoot集成Redis

作者头像
灰小猿
发布2022-05-05 21:11:09
4230
发布2022-05-05 21:11:09
举报
文章被收录于专栏:灰小猿技术社区

博主简介👨🏼‍⚕️:国内某一线互联网公司Java工程师👨🏼‍💻,业余自媒体创作者💻,CSDN博客专家🏆,Java领域优质创作者📕,华为云享专家🥇,华为HDZ核心成员👨‍💼,曾发表并出版ISEAE信息科学国际论文,全网累计发表技术博客60余万字📒,公众号【码猿编程日记】作者,坚信每一次敲动键盘都能让生活变得更智能,世界变得更有趣!

课前答疑:很多小伙伴问我零基础或者根本没有使用过Redis,可以学习嘛?当然是可以的!充分考虑到小伙伴们的学习程度有所不同,所以本次课程的所有操作都是在Windows环境下进行的,不会依赖太多的环境配置,且上手容易。已经学习过Redis的小伙伴们同样可以再学习一遍,温故而知新,还能拿CSDN定制周边!何乐而不为呢😀

今日学习内容

昨天我们讲了如何通过Java来操作Redis,其中讲到了三个操作Redis的工具类,分别是Jedis、RedisTemplate、StringRedisTemplate。今天这一节我们主要来讲一下Redis在实际项目开发中的主要使用,一般Redis会结合spring系列框架使用,最常见的就是SpringBoot集成Redis。在此没有学习过springboot框架的小伙伴可以先把这一篇作为了解,熟悉一下Redis在开发中的实际使用,为以后的学习打下基础。但是最后面Redis的配置文件还是建议去学习一下的!

今天的学习推荐使用IDEA软件,附上一个大佬的IDEA下载安装教程【IDEA下载安装

一、SpringBoot集成Redis

没有学习过springboot的兄弟们,如果感兴趣的话可以先学习一下如何创建springboot项目和Maven依赖,【springboot及maven创建教程】,

1、导入jar包

由于springboot是一个Maven项目,所以一般是通过在pom.xml文件写入依赖的方式导入所需jar包,springboot集成Redis所需的jar包依赖是:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2、编写yml配置文件

我们在上一篇文章中和大家讲了如果想要在spring系列的框架中使用redis,那么一般使用的是RedisTemplate和stringRedisTemplate这两个工具类,并且对于ip地址,端口号这些信息。在实际的项目开发中,我们并不会将其写死,而是写在配置文件中,方便之后的修改。

springboot的配置文件有两种,一种是application.propertis,另一种是application,yml。两种配置文件的作用是一样的,但是yml文件的可读性相对来说更强一点。

注意:springboot在创建之后默认的配置文件是application.propertis,使用application,yml的话,可以将application.propertis文件删除并创建application,yml文件

我们以yml文件中配置为例,来编写springboot中Redis的配置:

代码语言:javascript
复制
##redis配置信息
spring:
  redis:
    database: 0 #redis数据库索引,默认为0
    host: 127.0.0.1 #redis服务器地址
    port: 6379 #redis服务器连接端口
    password: #redis服务器连接密码,默认为null
    timeout: 5000 #redis连接超时时间
# ******** 如果不使用连接池,那么下面这部分可省略不写 ********
    jedis:
      pool: #连接池配置
        max-active: 8 #连接池最大连接数
        max-wait: -1 #连接池最大阻塞等待时间
        max-idle: 8 #连接池中的最大空闲连接数
        min-idle: 0 #连接池中的最小空闲连接数

配置完成之后,我们就可以在springboot中使用RedisTemplate工具类来操作Redis了,

注意:在操作中仍要保证Redis服务器的命令行端口处于开启状态!

我们以操作RedisTemplate工具类为例,在类中如果想要使用RedisTemplate工具类,需要将其加上@Autowired注解,将其自动注入。否则RedisTemplate就不会根据我们配置文件中的Redis参数连接到Redis!

代码语言:javascript
复制
@SpringBootTest
class SpringbootredisApplicationTests {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 使用redisTemplate操作
     */
    @Test
    public void redisTest07() {
        System.out.println("redisTemplate集成测试");
        redisTemplate.opsForValue().set("姓名","灰小猿");
        System.out.println("获取到的姓名:" + redisTemplate.opsForValue().get("姓名"));

//        数据库操作
        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
//        清空当前数据库
//        connection.flushDb();
//        清空所有数据库
//        connection.flushAll();

    }
}

解释一下上面代码中的数据库操作,该行代码可以连接到我们的Redis数据库,执行数据库中数据的删除、清空、查询等操作。但是如果想要专门操作某一个数据类型的数据,还是需要通过相应的opsForxxx()方法进行!

运行结果:

redisTemplate集成测试 获取到的姓名:灰小猿

到这里,springboot集成Redis并使用RedisTemplate工具类进行操作就完成了,这也是在平常进行项目开发时,最简单也是最常用的集成方式!

二、自定义RedisTemplate

自定义redisTemplate是在日常开发中经常要用到的一项操作,我们先来科普一点,Redis在存储数据的时候,底层默认使用的是JBK的方式进行序列化的,而这种方式,往往会将我们存储的非string类型的数据转义成一堆乱码,不利于实际的开发。

原始序列化方式测试

我们以一个实例来分析一下:

建立一个User类:

代码语言:javascript
复制
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User implements Serializable {
    private String name;
    private int age;
}

使用redisTemplate类来输入一个user类型的键值对,并获取输入的值:

代码语言:javascript
复制
    @Autowired
    private RedisTemplate redisTemplate;   

    @Test
    public void redisTest08() {
        User user = new User("灰小猿", 5);
        redisTemplate.opsForValue().set("user", user);
        System.out.println("获取到的数值:");
        System.out.println(redisTemplate.opsForValue().get("user"));
    }

执行结果为:

获取到的数值: User(name=灰小猿, age=5)

我们可以看到现在Redis是以默认的JBK的方式进行序列化的。得到的结果如上。

但是现在的项目更多的是采用的前后端分离的方式进行的,数据的传输一般都是以JSON的形式,尤其是对象的传输,

原因是:JSON 语法格式简单、层次结构清晰、并且在数据交换方面,JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用的带宽。

所以对于Redis中的数据,在实际开发中,我们一般也会将其存储为JSON的形式,这个时候就需要我们通过自定义redisTemplate的方式将Redis默认的序列化方式改为JSON的形式,

自定义redisTemplate的方法

自定义redisTemplate的方法是:新建一个配置类RedisConfig,在其中注入一个Bean,并实现自定义的序列化方法。完整的自定义配置类如下:这个一般是企业开发的固定模板,作用是将Redis默认的序列化方式改为JSON的方式。下面的这个配置类,在开发中可以直接拿过来用即可!

代码语言:javascript
复制
/**
 * 自定义redisTemplate
 * 解决实现序列化
 *
 * @author YunGang.Guo
 * @date 2021/12/27 14:45
 **/
@Configuration
public class RedisConfig {

    /**
     * 编写自己的redisTemplate
     *
     * @param factory
     * @return
     */
    @Bean("redisTemplate")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
//      为了开发方便,一般都使用<String, Object>类型
        RedisTemplate<String, Object> template = new RedisTemplate();
//      连接工厂
        template.setConnectionFactory(factory);

//        序列化配置
        FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
//        value值的序列化采用FastJsonRedisSerializer
        template.setValueSerializer(fastJsonRedisSerializer);
//        hash值的序列化采用FastJsonRedisSerializer的方式
        template.setHashValueSerializer(fastJsonRedisSerializer);

//        key的序列化采用StringRedisSerializer
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
//        hash的key的序列化采用StringRedisSerializer的方式
        template.setHashKeySerializer(stringRedisSerializer);

        return template;
    }
}

完成自定义配置类之后,我们再来执行上面的测试方法:

代码语言:javascript
复制
    @Autowired
    private RedisTemplate redisTemplate;   

    @Test
    public void redisTest08() {
        User user = new User("灰小猿", 5);
        redisTemplate.opsForValue().set("user", user);
        System.out.println("获取到的数值:");
        System.out.println(redisTemplate.opsForValue().get("user"));
    }

得到的运行结果为:

获取到的数值: {"name":"灰小猿","age":5}

可以发现明显与默认的存储方法不同,现在我们存储在Redis中的对象,就会自动以JSON的方式进行序列化并存储啦!

三、Redis配置文件详解

很多小伙伴在安装软件的时候不喜欢看配置文件,但是对于这种常用的开发软件来说,常用的一些配置都是可以在配置文件中找到并为定制化开发进行修改的。搞懂了配置文件,也就是搞懂了这个软件的参数设置是从哪里来的。

工欲善其事必先利其器,所以我们使用Redis,那么读懂Redis的配置文件也是非常重要的!接下来我就给大家讲解一下Redis的配置文件中,主要的一些关键配置。

Redis的配置文件在Redis的目录文件下,有两个,分别是:

  • redis.windows.conf        客户端配置文件
  • redis.windows-service.conf   服务器配置文件

 这两个文件里面的内容大体一样,我这里以redis.windows.conf 为例,按照顺序从上往下给大家讲解其中的关键配置:

NETWORK 网络部分

这部分主要是配置Redis连接的,从配置文件中就可以看出Redis使用的是TCP协议进行连接

代码语言:javascript
复制
################################## NETWORK #####################################

# 连接的ip地址
bind 127.0.0.1

# 保护模式
protected-mode yes

# 端口设置
port 6379

# TCP连接配置,连接数
tcp-backlog 511

# TCP连接超时时间
timeout 0

# TCP保持连接时间
tcp-keepalive 300

GENERAL 通用配置

通用配置部分主要配置日志信息,如果想要修改Redis操作日志,可以在这一部分修改。

代码语言:javascript
复制
################################# GENERAL 通用配置 #####################################

# 日志配置
loglevel notice

# 生成的日志文件名
logfile ""

# 默认的数据库配置 默认16个数据库
databases 16

# 是否显示logo
always-show-logo yes

SNAPSHOTTING 快照

这部分主要是做持久化的,定义数据多久保存一次,以及保存的一些配置、

代码语言:javascript
复制
################################ SNAPSHOTTING 快照 ################################

# 在规定时间内执行了多少次操作,则会持久化到文件
# 如果900秒内,至少有1个key进行了修改,就进行持久化操作,下面含义一样
save 900 1
save 300 10
save 60 10000

# 持久化出错后是否继续工作
stop-writes-on-bgsave-error yes

# 是否压缩rdb文件,压缩会消耗cpu资源
rdbcompression yes

# 保存rbd文件时,是否校验rdb文件
rdbchecksum yes

# db文件名
dbfilename dump.rdb

# rdb文件的保存目录
dir ./

SECURITY 安全配置

安全部分主要是用于设置Redis的访问密码。设置密码之后,使用Redis之前就需要输入密码了,默认是没有密码的。一般也不建议设置。

代码语言:javascript
复制
################################## SECURITY 安全 ###################################

# 设置密码 requirepass 123456
# requirepass foobared

CLIENTS 客户端限制

主要参数是配置服务器能够连接的最大客户端数量

代码语言:javascript
复制
################################### CLIENTS 客户端限制####################################

# 最大连接客户端数
# maxclients 10000

MEMORY MANAGEMENT 内存管理

这部分主要是配置Redis的最大内存,以及在内存满的情况下,做出怎样的清除策略,Redis默认是不清除,六大清除策略分别是:

  1. volatile-lru:只对设置了过期时间的key进行LRU(默认值)
  2. allkeys-lru:删除LRU算法的key
  3. volatile-random:随机删除即将过期的key
  4. allkeys-random:随机删除
  5. volatile-ttl:删除即将过期的
  6. noeviction:永不过期,返回错误
代码语言:javascript
复制
############################## MEMORY MANAGEMENT 内存管理 ################################

# Redis配置最大内存
# maxmemory <bytes>

# The default is: 默认不清除
# 内存到达上限之后的处理策略
# 1、volatile-lru:只对设置了过期时间的key进行LRU(默认值)
# 2、allkeys-lru:删除LRU算法的key
# 3、volatile-random:随机删除即将过期的key
# 4、allkeys-random:随机删除
# 5、volatile-ttl:删除即将过期的
# 6、noeviction:永不过期,返回错误
# maxmemory-policy noeviction

以上是一些主要的配置,也是平常在开发中可能会去修改的一些参数,

今日总结

今天学习的内容可以说是实际开发中使用Redis的基本操作了,首先在spring系列框架中集成Redis、通过yml配置文件的形式进行配置连接。之后如果想要Redis存储JSON形式的对象,还需要自定义redisTemplate类。最后为了能够适应一些特殊场景的开发,需要对Redis的配置文件有所了解。到这里Redis初步实践的内容基本上就结束了,下一篇文章和大家分享Redis中的场景面试题。看看企业在Redis上都会问哪些问题!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今日学习内容
  • 一、SpringBoot集成Redis
  • 二、自定义RedisTemplate
    • 原始序列化方式测试
      • 自定义redisTemplate的方法
      • 三、Redis配置文件详解
      • 今日总结
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档