1 导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--redis数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
2自定义RedisTemplate类
2.1框架自带RedisTemplate类源码分析
//RedisProperties 引用外部配置类,将application.yml/application.properties中的配置注入
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
//当Spring框架中存在名为redisTemplate的Bean时不生效
//处理键是Object,值是Object的数据
//依赖RedisConnectionFactory 连接工厂Bean,根据RedisProperties中连接数据库信息交由Spring管理该Bean
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
//处理键值都是String类型的数据
@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
根据实际,多处理键为String,值为Object的数据,Spring框架中自带的RedisTemplate类不适用于实际需求,所有可自定义注入RedisTemplate的Bean。
2.2自定义RedisTemplateBean
/**
* @author lyf
* @projectName community
* @date 2022/4/20 上午 11:35
* @description 自定义redisTemplate
*/
@Configuration
public class RedisConfig {
/**
* 生成该Bean需要依赖RedisConnectionFactory 连接工厂
* @param redisConnectionFactory
* 替换默认的<Object,Object>的key-value存储数据的格式,采用<String,Object>的key-value存储数据格式
* @return
*/
@Bean
public RedisTemplate<String,Object>redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object>redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//根据存储的键值数据类型,设置序列化的方式
//设置key的序列化方式--字符串
redisTemplate.setKeySerializer(RedisSerializer.string());
//设置String-Value的序列化方式--Json
redisTemplate.setValueSerializer(RedisSerializer.json());
//设置Hash-key的序列化方式--字符串
redisTemplate.setHashKeySerializer(RedisSerializer.string());
//设置hash-Value的序列化方式--Json
redisTemplate.setHashValueSerializer(RedisSerializer.json());
//属性设置完后,生效属性
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
3 配置application.yml
根据RedisProperties配置redis
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
/**
* Database index used by the connection factory.
*/
private int database = 0;
/**
* Connection URL. Overrides host, port, and password. User is ignored. Example:
* redis://user:password@example.com:6379
*/
private String url;
/**
* Redis server host.
*/
private String host = "localhost";
/**
* Login password of the redis server.
*/
private String password;
/**
* Redis server port.
*/
private int port = 6379;
/**
* Whether to enable SSL support.
*/
private boolean ssl;
/**
* Connection timeout.
*/
private Duration timeout;
private Sentinel sentinel;
private Cluster cluster;
private final Jedis jedis = new Jedis();
private final Lettuce lettuce = new Lettuce();
}
spring:
#RedisProperties
redis:
host: localhost
#选定的数据库【默认的是0,redis共16个数据库】
database: 2
4 常用数据类型的操作
RedisTemplate提供的操作多种数据类型,Key的方法与Redis数据库命令类似,调用该工具Template的的接口时,可参考Redis的命令