springboot中的redis怎么正确使用
redis实现了对数据的缓存,在项目里一些字典数据,会话数据,临时性数据都会向redis来存储,而在springboot里对redis也有支持,一般来说多个线程共同使用一个redis实现是有线程安全的风险的,而每个实现一个线程又太浪费资源,无法控制线程数量是非常危险的,所以就出现了一些redis线程池组件,下面说一下两个主要的组件。jedis线程池主要是每个实例有自己的线程,线程可以从它建立的池子里获取lettucelettuce是apache推出的线程池工具,它的redis实例是可以被多个线程共享访问的
redis实现了对数据的缓存,在项目里一些字典数据,会话数据,临时性数据都会向redis来存储,而在springboot里对redis也有支持,一般来说多个线程共同使用一个redis实现是有线程安全的风险的,而每个实现一个线程又太浪费资源,无法控制线程数量是非常危险的,所以就出现了一些redis线程池组件,下面说一下两个主要的组件。
jedis 线程池主要是每个实例有自己的线程,线程可以从它建立的池子里获取
lettuce lettuce是 apache推出的线程池工具,它的redis实例是可以被多个线程共享访问的,提高了资源使用率
redis序列化配置
一般来说, redis-key采用字符串序列化; redis-value采用json序列化, json的体积小,可读性高,不需要实现serializer接口。
/**
* 对redis的配置.
*/
@Configuration
public class RedisConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
/**
* redis重写RedisTemplate.
*/
@Bean
public RedisTemplate redisTemplate() {
RedisTemplate redisTemplate = new RedisTemplate();
RedisSerializer stringSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//序列化时允许非常量字段均输出类型,即redis序列化后带有类型
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// redis key的序列化
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
// redis value的序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
} 上面代码中,om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL)产生的json串是带有类型的,这样再反序列化时可以直接通过类型去推断。
[
"com.lind.basic.entity.Token",
{
"credentials": "ok",
"region": "hello",
"bucket": null
}
]看一下添加和读取的代码
@GetMapping("set")
public String set() throws JsonProcessingException {
Token token = Token.builder()
.credentials("ok")
.region("hello")
.build();
redisTemplate.opsForValue().set("test:user", token);//redisTemplate帮我们序列化
redisTemplate.opsForHash().put("author", "zzl", token);
return "OK";
}
@GetMapping("get")
public Token get() throws IOException {
return (Token) redisTemplate.opsForValue().get("test:user");
}注意:对于实体类Token它应该有一个无参构造方法,这是反序列化时需要的。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















