三、Java客户端

1. Jedis
1.1 基本使用


1.2 连接池

public final class JedisConnectionPool {
private static volatile JedisPool jedisPool;
public static Jedis getJedis(){
if (jedisPool == null) {
synchronized (JedisConnectionPool.class) {
if (jedisPool == null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(8);
config.setMaxIdle(8);
config.setMinIdle(0);
config.setMaxWait(Duration.of(200, ChronoUnit.MILLIS));
jedisPool = new JedisPool(config,"192.168.10.102",6379,1000);
return jedisPool.getResource();
}
}
}
return jedisPool.getResource();
}
}
// close方法 如果是连接池制造的Jedis对象 close方法则是归还
public void close() {
if (this.dataSource != null) {
JedisPoolAbstract pool = this.dataSource;
this.dataSource = null;
if (this.isBroken()) {
pool.returnBrokenResource(this);
} else {
// 归还
pool.returnResource(this);
}
} else {
super.close();
}
}
2. Lettuce/Spring Data Redis
2.1 初识




2.2 序列化


@Bean
public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
redisTemplate.setValueSerializer(serializer);
redisTemplate.setHashValueSerializer(serializer);
return redisTemplate;
}
@Configuration
public class RedisConfigurea {
@Bean
public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory factory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
// 设置链接工厂
redisTemplate.setConnectionFactory(factory);
// key的序列化
StringRedisSerializer redisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);
// value序列化
Jackson2JsonRedisSerializer<Object> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
//序列化时将类的数据类型存入json,以便反序列化的时候转换成正确的类型
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);
// 解决jackson2无法反序列化LocalDateTime的问题
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.registerModule(new JavaTimeModule());
jsonRedisSerializer.setObjectMapper(objectMapper);
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashKeySerializer(jsonRedisSerializer);
return redisTemplate;
}
}
2.3 StringRedisTemplate


