三、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 序列化


@Beanpublic 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;}
@Configurationpublic 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


