文章目录
- 前言
- 一、Jedis和Lettuce的区别
- 二、Jedis客户端
- 1.引入Jedis依赖:
- 2.使用Jedis对象进行简单操作
- 3.使用JedisPool
- 三、Lettuce客户端
- 1.引入依赖
- 2.Lettuce客户端的使用
- 四、SpringBoot中使用Redis
- 1.引入依赖
- 2.在yml中配置Redis服务信息
- 3.使用RedisTemplate
前言
Redis作为一种受到广泛使用的键值对数据库,常被用做缓存。同时具备了高性能、可扩展性强、高可用等优点。作为Java开发人员也时长会和Redis打交道,本文为大家介绍下我们常用的Redis客户端,以及在SpringBoot中如何使用Redis。
一、Jedis和Lettuce的区别
- Jedis客户端是采用Socket和Redis服务直连,所以多线程共享一个实例是不安全的,可以创建多个连接解决。但是连接数过多后成本较高,资源利用多,所以在生产中较好的方式就是采用JedisPool。
- Lettuce的连接是基于Netty的,连接实例可以在多个线程间共享。所以相较于Jedis在资源利用上更加优秀,推荐使用。
二、Jedis客户端
1.引入Jedis依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
2.使用Jedis对象进行简单操作
添加完Jar包之后就可以使用Jedis对象对Redis进行简单操作了。
直接创建Jedis对象,就可以作为客户端进行读写Redis了。
public static void main(String[] args) {
Jedis jedisClient = null;
try {
jedisClient = new Jedis("127.0.0.1", 6379);
jedisClient.get("test");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedisClient != null) {
jedisClient.close();
}
}
}
3.使用JedisPool
使用Jedis单一对象的创建和关闭显然是不符合实际生产的使用的,所以Jedis的Jar中也提供了我们常用的JedisPool来作为生产环境下的使用。
第一步需要在程序中初始化Redis连接池JedisPool,JedisPoolConfig 可以对连接进行配置,常见的有超时、连接数等相关配置;JedisPool为连接池实例。
第二步在连接池中获取客户端实例进行操作.
// pool连接池配置
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(connNum);
config.setMaxTotal(connNum);
config.setMinIdle(connNum);
//仅在空闲时检查有效性
config.setTestWhileIdle(true);
//连接最大等待时间
config.setMaxWaitMillis(15);
// 初始化Jedis连接池
JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);
三、Lettuce客户端
1.引入依赖
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>5.1.0.M1</version>
</dependency>
2.Lettuce客户端的使用
- 第一步:初始化RedisClient,该类为Lettuce提供的redis客户端类。
- 第二步:从客户端中获取连接。
- 第三步:选取不同的连接,进行redis操作
RedisClient client = RedisClient.create(RedisURI.create("redis://127.0.0.1:6379"));
StatefulRedisConnection<String, String> connect = client.connect();
try {
RedisCommands<String, String> sync = connect.sync();
String test = sync.get("test");
RedisAsyncCommands<String, String> async = connect.async();
RedisFuture<String> future = async.get("test");
future.get();
} catch (Exception e) {
e.printStackTrace();
}
connect.close();
lettuce客户端提供了同步和异步的连接,可以根据业务进行选取。
四、SpringBoot中使用Redis
SpringBoot2.0之前默认使用Jedis,而2.0之后默认就都是使用的Lettuce这个客户端连接Redis服务器。
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
当前Spingboot都是2.0以后的版本,所以默认会采用Lettuce作为客户端。如果想要使用Jedis,需要排除Lettuce依赖,并引入Jedis以及Jedis依赖的commons-pool2。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2.在yml中配置Redis服务信息
spring:
redis:
host: 127.0.0.1
port: 6379
password:
lettuce:
pool:
max-idle: // 最多维持多少个空闲连接
min-idle: // 最小维持多少个空闲连接
# jedis:
# pool:
# max-active:
# min-idle:
3.使用RedisTemplate
直接使用Autowired直接注入redisTemplate就可以使用操作Redis了,具体的操作方法大家可以依据实际业务选择,这里就不多做介绍了~
@Autowired
private RedisTemplate<String,Object> redisTemplate;