redistemplate是spring对jedis的封装。相对于jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用。以下为redistemplate简单使用。
1.引入spring-data-redis
<!-- 对于版本号没有要求不需要显示指定version,spring boot已集成该jar -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2.创建application.yml配置文件
server:
port: 8080
spring:
redis:
cluster:
nodes:
- ip:6379
- ip:6380
- ip:6381
password: 123456
maxRedirects: 3
3.创建RedisClusterConfigProperties读取配置文件
@Configuration
@ConfigurationProperties(prefix = "spring.redis.cluster")
public class RedisClusterConfigProperties {
/**
* 节点
*/
private List<String> nodes;
/**
* 最大重定向次数
*/
private Integer maxRedirects;
/**
* 密码
*/
private String password;
public List<String> getNodes() {
return nodes;
}
public void setNodes(List<String> nodes) {
this.nodes = nodes;
}
public Integer getMaxRedirects() {
return maxRedirects;
}
public void setMaxRedirects(Integer maxRedirects) {
this.maxRedirects = maxRedirects;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
4.配置连接信息,配置redistemplate
@Configuration
public class RedisConfig {
@Autowired
RedisClusterConfigProperties redisClusterConfigProperties;
@Bean
public RedisClusterConfiguration getClusterConfig() {
RedisClusterConfiguration rcc =
new RedisClusterConfiguration(redisClusterConfigProperties.getNodes());
rcc.setMaxRedirects(redisClusterConfigProperties.getMaxRedirects());
rcc.setPassword(RedisPassword.of(redisClusterConfigProperties.getPassword()));
return rcc;
}
@Bean
public JedisConnectionFactory redisConnectionFactory(RedisClusterConfiguration cluster) {
return new JedisConnectionFactory(cluster);
}
/**
* 使用Jackson2JsonRedisSerializer进行序列化,可以随意组合序列化方式,默认使用jdk序列化,直接去redis看找不明白对应key
*
* @param factory
* @return
*/
@Bean
public RedisTemplate<String, Object> jackson2JsonTemplate(JedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(factory);
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer =
new GenericJackson2JsonRedisSerializer();
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
/**
* 使用String进行序列化,可以随意组合序列化方式
*
* @param factory
* @return
*/
@Bean
public StringRedisTemplate stringTemplate(RedisConnectionFactory factory) {
StringRedisTemplate stringTemplate = new StringRedisTemplate();
stringTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
stringTemplate.setKeySerializer(stringSerializer);
stringTemplate.setHashKeySerializer(stringSerializer);
stringTemplate.setValueSerializer(stringSerializer);
stringTemplate.setHashValueSerializer(stringSerializer);
return stringTemplate;
}
/**
* 混合序列化,可以随意组合序列化方式
*
* @param factory
* @return
*/
@Bean
public StringRedisTemplate blendTemplate(RedisConnectionFactory factory) {
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer =
new GenericJackson2JsonRedisSerializer();
StringRedisTemplate stringTemplate = new StringRedisTemplate();
stringTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
stringTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);
stringTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer);
stringTemplate.setValueSerializer(stringSerializer);
stringTemplate.setHashValueSerializer(stringSerializer);
return stringTemplate;
}
5.创建工具类对redistemplate封装
@Component
public class RedisUtil {
Logger logger = LoggerFactory.getLogger(RedisUtil.class);
@Resource(name = "stringTemplate")
private RedisTemplate redisTemplate;
public String get(String key) {
try {
return (String) redisTemplate.opsForValue().get(key);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return null;
}
public void set(String key, String value) {
try {
redisTemplate.opsForValue().set(key, value);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
6.新增接口测试
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
RedisUtil RedisUtil;
@RequestMapping(value = "/setString", method = RequestMethod.POST)
public void setString(@RequestBody TestRedisReqDTO reqDTO) {
RedisUtil.set(reqDTO.getKey(), reqDTO.getValue());
}
@RequestMapping(value = "/getString", method = RequestMethod.POST)
public TestRedisResDTO getString(@RequestBody TestRedisReqDTO reqDTO) {
TestRedisResDTO resDTO = new TestRedisResDTO();
resDTO.setValue(RedisUtil.get(reqDTO.getKey()));
return resDTO;
}
完整代码可点击代码下载