本文讲解了SpringBoot整合Redis的入门基本应用,包括redis的环境配置以及简单的功能使用
环境:
centOS7+Redis 6.2.6+SpringBoot 2.6.4
安装配置:
首先从官网下载Redis
【Redis官网下载: Redis】并解压,
然后配置环境
yum install gcc-c++
make
make install
然后我们需要对redis.conf配置文件进行一些基础的配置,打开redis.conf可见如下配置
bind 127.0.0.1 -::1
绑定了可以通过什么ip对redis进行访问,这里先将其注释,以防无法远程访问
protected-mode no
配置保护模式,设置为no开放远程访问
port 6379
端口号
timeout 5000
连接超时时间配置
daemonize yes
开启守护进程
requirepass 密码
redis的访问密码
如果在远程连接的时候无法连接,别忘了关闭防火墙和设置组策略
service iptables stop //关闭iptable防火墙
systemctl stop firewalld //关闭firewalld防火墙
启动Redis
执行命令:
redis-server redis.conf
客户端访问:
redis-cli
如果是远程访问,可加上host与port :
redis-cli -h xx.xx.xx.xx -p 6379
测试连接
命令行输入ping,返回pong即连接成功
127.0.0.1:6379> ping
PONG
通过命令行简单的测试下set
127.0.0.1:6379> set user test1
OK
127.0.0.1:6379> GETRANGE user 0 -1
"test1"
至此,环境配置成功。
SpringBoot整合Redis
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件application.yml
spring:
redis:
host: 127.0.0.1 #redis的ip地址
port: 6379
timeout: 5000 #连接超时
password: 密码
基本功能测试
简单的存取一下字符串
//获取RedisTemplate对象
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Test
void contextLoads() {
//set字符串
redisTemplate.opsForValue().set("user","test1");
System.out.println(redisTemplate.opsForValue().get("user"));
}
成功存入redis
127.0.0.1:6379> get user
"test1"
自定义RedisTemplate配置类
自定义序列化方式,以便于以Json格式存取实体对象,默认情况下会使用JdkSerializationRedisSerializer进行序列化
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
//配置连接工厂
template.setConnectionFactory(connectionFactory);
//使用Jackson配置Object的序列化
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
//通过ObjectMapper将对象转换为JSON字符串
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
serializer.setObjectMapper(mapper);
//字符串序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key设置为字符串序列化
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
//Value设置为Object序列化
template.setValueSerializer(serializer);
template.setHashKeySerializer(serializer);
template.afterPropertiesSet();
return template;
}
}
测试实体类的序列化
自定义一个User类,实现Serializable接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private Integer id;
private String username;
}
使用刚才自定义的 RedisTemplate<String, Object>,测试实体对象的序列化
@Autowired
@Qualifier("redisTemplate")
private RedisTemplate<String, Object> redisTemplate;
@Test
public void serializableTest(){
//set值
redisTemplate.opsForValue().set("user1",new User(1,"name"));
//get值
System.out.println(redisTemplate.opsForValue().get("user1"));
}
User对象已经以json的形式序列化存储到redis中了
127.0.0.1:6379> get user1
"{\"id\":1,\"username\":\"name\"}"