jedis和redistemplate优缺点
时间: 2023-06-05 19:47:17 浏览: 605
jedis和redistemplate都是Java操作Redis的工具类库,它们各有优缺点。
jedis是Redis官方推荐的Java客户端,具有以下优点:
1. 简单易用,API清晰明了,易于上手。
2. 性能优秀,因为jedis底层使用了高效的连接池和序列化机制。
3. 功能丰富,支持Redis的所有操作,包括事务、管道、发布订阅等。
但是jedis也存在一些缺点:
1. 不支持Redis的集群模式,需要手动实现分片。
2. 不支持异步操作,需要手动实现线程池。
3. 不支持事务的回滚操作。
redistemplate是Spring框架提供的Redis操作模板类,具有以下优点:
1. 集成了Spring框架,可以方便地与其他Spring组件进行整合。
2. 支持Redis的集群模式,可以自动实现分片。
3. 支持异步操作,可以使用Spring的异步机制。
4. 支持事务的回滚操作。
但是redistemplate也存在一些缺点:
1. API相对复杂,需要一定的学习成本。
2. 性能相对较差,因为redistemplate底层使用了反射机制和动态代理。
综上所述,选择jedis还是redistemplate,需要根据具体的项目需求和开发经验来决定。
相关问题
Spring Authorization Server RedisTokenStore怎么做序列化和反序列化
Spring Authorization Server RedisTokenStore 默认使用 JDK 序列化方式来序列化和反序列化 Token,但是 JDK 序列化方式有一些缺点,比如序列化后的字节数组长度大、序列化速度慢、可读性差等。为了解决这些问题,可以使用其他序列化方式,比如 JSON 序列化方式。
具体实现步骤如下:
1. 添加 Redis 相关依赖,比如 jedis、lettuce 等。
2. 在 Spring Security 配置类中创建 RedisConnectionFactory 和 RedisTemplate,代码如下:
```
@Configuration
public class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory("localhost", 6379);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
```
3. 修改 TokenStore 的实现类 RedisTokenStore 中的序列化代码,将 JDK 序列化方式改为 JSON 序列化方式,代码如下:
```
public class RedisTokenStore implements TokenStore {
private static final String ACCESS_TOKEN_PREFIX = "access:";
private static final String REFRESH_TOKEN_PREFIX = "refresh:";
private final RedisTemplate<String, Object> redisTemplate;
public RedisTokenStore(RedisConnectionFactory connectionFactory) {
Assert.notNull(connectionFactory, "connectionFactory cannot be null");
this.redisTemplate = new RedisTemplate<>();
this.redisTemplate.setConnectionFactory(connectionFactory);
this.redisTemplate.setKeySerializer(new StringRedisSerializer());
this.redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());
this.redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
this.redisTemplate.afterPropertiesSet();
}
// ...
}
```
这样就可以使用 JSON 序列化方式来序列化和反序列化 Token 了。
阅读全文