一、Redis的Java客户端
常用客户端介绍

Jedis客户端
基本使用(直连)
- 
引入对应依赖 
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version></version>
</dependency>
- 
建立与Redis服务器的连接 
private Jedis jedis;
// 建立连接
jedis =  new Jedis("ip", port);
// 设置密码
jedis.auth("");
// 选择库
jedis.select(0);
- 
业务操作 
jedis.set("name", "张三");
String name = jedis.get("name");
- 
关闭连接 
if (jedis != null) {
  jedis.close();
}
Jedis连接池
Jedis本身是不安全的,并且频繁的创建和销毁连接会有性能损耗。因此,使用Jedis连接池代替Jedis直连。
public class JedisConnectionFactory {
  private static final JedisPool jedisPool;
  
  static {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    // 最大连接数
    jedisPoolConfig.setMaxTotal(8);
    // 最大空闲连接
    jedisPoolConfig.setMaxIdle(8);
    // 最小空闲连接
    jedisPoolConfig.setMinIdle(0);
    // 最长等待时间,ms
    jedisPoolConfig.setMaxWaitMillis(1000);
    jedisPool = new JedisPool(jedisPoolConfig, "ip", port, 1000, "password");
  }
  
  // 获取jedis对象
  public static Jedis getJedis() {
    return jedisPool.getResource();
  }
}
SpringDataRedis
springData是Spring中数据操作的模块,包含对各种数据库的集成,其中Redis的集成模块就叫做SpringDataRedis。
- 
提供了对不同Redis客户端的整合(Lettuce和Jedis) 
- 
提供了RedisTemplate统一API来操作Redis 
- 
支持Redis的发布订阅模型 
- 
支持Redis哨兵和Redis集群 
- 
支持基于Lettuce的响应式编程 
- 
支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化 
- 
支持基于Redis的JDKCollection实现 
RedisTemplate工具类

SpringBoot整合Redis
- 
引入对应依赖 
<!-- json解析库fastjson,用于序列化 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.83</version>
    </dependency>
    <!-- redis -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
<!--      <exclusions>-->
<!--        <!– 高并发下OOM异常,断连 –>-->
<!--        <exclusion>-->
<!--          <groupId>io.lettuce</groupId>-->
<!--          <artifactId>lettuce-core</artifactId>-->
<!--        </exclusion>-->
<!--      </exclusions>-->
    </dependency>
    <!-- 排除默认使用的lettuce,使用jedis代替 -->
<!--    <dependency>-->
<!--      <groupId>redis.clients</groupId>-->
<!--      <artifactId>jedis</artifactId>-->
<!--    </dependency>-->
默认情况下使用lettuce,你也可以手动排除,使用Jedis客户端。
- 
Redis配置类编写 
package com.example.wvpdisassembly.conf;
import com.alibaba.fastjson.parser.ParserConfig;
import com.example.wvpdisassembly.utils.redis.FastJsonRedisSerializer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
 * @Description redis配置类
 * @Author LH
 * @Date 2022/11/14 11:11
 **/
自定义序列化类
package com.example.wvpdisassembly.utils.redis;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
/**
 * @Description 使用fastjson实现redis的序列化
 * @Author LH
 * @Date 2022/11/14 13:59
 **/
public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
    private Class<T> clazz;
    public FastJsonRedisSerializer(Class<T> clazz) {
        super();
        this.clazz = clazz;
    }
    
Redis工具类
package com.example.wvpdisassembly.utils.redis;
import com.alibaba.fastjson.JSONObject;
import com.example.wvpdisassembly.utils.SpringBeanUtil;
import org.springframework.data.redis.core.*;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * @Description Redis工具类
 * @Author LH
 * @Date 2022/11/14 14:00
 **/
