文章目录

  • 前言
  • 一、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;