今天这一节我们主要来讲一下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: 默认不清除
# 内存到达上限之后的处理策略
# 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
大部分学习自于灰小猿大佬的博客。