一、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
**/