七天玩转Redis | 第6天 SpringBoot集成Redis

今天这一节我们主要来讲一下Redis在实际项目开发中的主要使用,一般Redis会结合spring系列框架使用,最常见的就是SpringBoot集成Redis。

一、SpringBoot集成Redis:

先创建一个springboot项目以及配置好maven
然后在pom.xml里面导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

然后编辑yml配置文件:

##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 #连接池中的最小空闲连接数

注意在操作过程中保持Redis的命令行端口处于开启状态

二、自定义RedisTemplate

建立一个User类:

@AllArgsConstructor
@NoArgsConstructor
@Data
public class User implements Serializable {
    private String name;
    private int age;
}

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

    @Autowired
    private RedisTemplate redisTemplate;   
 
    @Test
    public void redisTest08() {
        User user = new User("徐攀", 20);
        redisTemplate.opsForValue().set("user", user);
        System.out.println("获取到的数值:");
        System.out.println(redisTemplate.opsForValue().get("user"));
    }

执行结果:
User(name=徐攀, age=20)
Redis是以默认的JBK的方式进行序列化的。得到的结果如上。
但是现在的项目更多的是采用的前后端分离的方式进行的,数据的传输一般都是以JSON的形式,尤其是对象的传输,对于Redis中的数据,在实际开发中,我们一般也会将其存储为JSON的形式,这个时候就需要我们通过自定义redisTemplate的方式将Redis默认的序列化方式改为JSON的形式。

三、自定义redisTemplate的方法

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

/**
 * 自定义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;
    }
}

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

    @Autowired
    private RedisTemplate redisTemplate;   
 
    @Test
    public void redisTest08() {
        User user = new User("徐攀", 20);
        redisTemplate.opsForValue().set("user", user);
        System.out.println("获取到的数值:");
        System.out.println(redisTemplate.opsForValue().get("user"));
    }

得到的运行结果为:{“name”:“徐攀”,“age”:20}
可以发现明显与默认的存储方法不同,现在我们存储在Redis中的对象,就会自动以JSON的方式进行序列化并存储啦!

四、Redis配置文件详解:

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

redis.windows.conf 客户端配置文件
redis.windows-service.conf 服务器配置文件
NETWORK 网络部分
这部分主要是配置Redis连接的,从配置文件中就可以看出Redis使用的是TCP协议进行连接

################################## 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操作日志,可以在这一部分修改。

################################# GENERAL 通用配置 #####################################
# 日志配置
loglevel notice
# 生成的日志文件名
logfile ""
# 默认的数据库配置 默认16个数据库
databases 16
# 是否显示logo
always-show-logo yes

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

################################ 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之前就需要输入密码了,默认是没有密码的。一般也不建议设置。

################################## SECURITY 安全 ###################################
 
# 设置密码 requirepass 123456
# requirepass foobared

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

################################### CLIENTS 客户端限制####################################
# 最大连接客户端数
# maxclients 10000

MEMORY MANAGEMENT 内存管理
这部分主要是配置Redis的最大内存,以及在内存满的情况下,做出怎样的清除策略,Redis默认是不清除,六大清除策略分别是:
volatile-lru:只对设置了过期时间的key进行LRU(默认值)
allkeys-lru:删除LRU算法的key
volatile-random:随机删除即将过期的key
allkeys-random:随机删除
volatile-ttl:删除即将过期的
noeviction:永不过期,返回错误

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

大部分学习自于灰小猿大佬的博客。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mzldustu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值