三、Java客户端

Redis02 Java客户端 - 图1

1. Jedis

1.1 基本使用

Redis02 Java客户端 - 图2

Redis02 Java客户端 - 图3

1.2 连接池

Redis02 Java客户端 - 图4

  1. public final class JedisConnectionPool {
  2. private static volatile JedisPool jedisPool;
  3. public static Jedis getJedis(){
  4. if (jedisPool == null) {
  5. synchronized (JedisConnectionPool.class) {
  6. if (jedisPool == null) {
  7. JedisPoolConfig config = new JedisPoolConfig();
  8. config.setMaxTotal(8);
  9. config.setMaxIdle(8);
  10. config.setMinIdle(0);
  11. config.setMaxWait(Duration.of(200, ChronoUnit.MILLIS));
  12. jedisPool = new JedisPool(config,"192.168.10.102",6379,1000);
  13. return jedisPool.getResource();
  14. }
  15. }
  16. }
  17. return jedisPool.getResource();
  18. }
  19. }
  20. // close方法 如果是连接池制造的Jedis对象 close方法则是归还
  21. public void close() {
  22. if (this.dataSource != null) {
  23. JedisPoolAbstract pool = this.dataSource;
  24. this.dataSource = null;
  25. if (this.isBroken()) {
  26. pool.returnBrokenResource(this);
  27. } else {
  28. // 归还
  29. pool.returnResource(this);
  30. }
  31. } else {
  32. super.close();
  33. }
  34. }

2. Lettuce/Spring Data Redis

2.1 初识

Redis02 Java客户端 - 图5

Redis02 Java客户端 - 图6

Redis02 Java客户端 - 图7

Redis02 Java客户端 - 图8

2.2 序列化

Redis02 Java客户端 - 图9

Redis02 Java客户端 - 图10

  1. @Bean
  2. public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory factory){
  3. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  4. redisTemplate.setConnectionFactory(factory);
  5. redisTemplate.setKeySerializer(RedisSerializer.string());
  6. redisTemplate.setHashKeySerializer(RedisSerializer.string());
  7. GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
  8. redisTemplate.setValueSerializer(serializer);
  9. redisTemplate.setHashValueSerializer(serializer);
  10. return redisTemplate;
  11. }
  1. @Configuration
  2. public class RedisConfigurea {
  3. @Bean
  4. public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory factory){
  5. RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
  6. // 设置链接工厂
  7. redisTemplate.setConnectionFactory(factory);
  8. // key的序列化
  9. StringRedisSerializer redisSerializer = new StringRedisSerializer();
  10. redisTemplate.setKeySerializer(redisSerializer);
  11. // value序列化
  12. Jackson2JsonRedisSerializer<Object> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
  13. //序列化时将类的数据类型存入json,以便反序列化的时候转换成正确的类型
  14. ObjectMapper objectMapper = new ObjectMapper();
  15. objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);
  16. // 解决jackson2无法反序列化LocalDateTime的问题
  17. objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  18. objectMapper.registerModule(new JavaTimeModule());
  19. jsonRedisSerializer.setObjectMapper(objectMapper);
  20. redisTemplate.setValueSerializer(jsonRedisSerializer);
  21. redisTemplate.setHashKeySerializer(jsonRedisSerializer);
  22. return redisTemplate;
  23. }
  24. }

2.3 StringRedisTemplate

Redis02 Java客户端 - 图11

Redis02 Java客户端 - 图12

Redis02 Java客户端 - 图13