Redis的Java客户端——Jedis

目录

一、基本配置

1.1 引入依赖

1.2  建立连接

1.3 测试String类型

1.4 释放资源

1.5 运行结果

二、Jedis连接池


一、基本配置

Jedis的官方地址:GitHub - redis/jedis: Redis Java client designed for performance and ease of use.

Redis的Java客户端——Jedis_第1张图片

Jedis单词就是Java和Redis的组合单词

Jedis小小的弊端就是线程不安全的,多线程并发的时候是有线程安全问题的

但是不用担心,Spring擅长整合,后面会学SpringDataRedis,其会解决这些问题,底层兼容Jedis、lettuce

1.1 引入依赖

        
            redis.clients
            jedis
        

 1.2  建立连接

如果我们没有密码的话,我们就把第二条注释掉就可以了,否则就会报错

ERR Client sent AUTH, but no password is set

    private Jedis jedis;

    @BeforeEach//测试类中任何一个测试方法执行之前都先执行该注解标注的方法
    void contextLoads() {
//   1.建立连接
        jedis = new Jedis("127.0.0.1",6379);
//   2.设置密码
        jedis.auth("root");
//   3.选择库  如果我们不选择的话,默认就是选择的0号库
        jedis.select(0);
    }

1.3 测试String类型

   @Test
    void testString(){
//     存入数据
       String result = jedis.set("name","张靖奇");
       System.out.println("result:"+result);
//     获取数据
       String name = jedis.get("name");
       System.out.println("name:"+name);
   }

 1.4 释放资源

   @AfterEach
    void tearDown(){
//      我们这里应该判断一下,防止出现空指针异常
        if(jedis !=null){
            jedis.close();
        }
   }

 1.5 运行结果

1.6 测试Hash情况

    @Test
    void testHash(){
//      存放Hash数据
        jedis.hset("user:1","name","jack");
        jedis.hset("user:1","age","21");
//      取数据
        Map map = jedis.hgetAll("user:1");
        System.out.println(map);
    }

Redis的Java客户端——Jedis_第2张图片

 

二、Jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能的损耗,因此推荐使用Jedis连接池代替Jedis的直连方式

public class JedisConnectionFactory {
    private static final JedisPool jedisPool ;

    static {
//      1.配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
//        1.1配置最大连接数     最多配置8个连接
        poolConfig.setMaxTotal(8);
//        1.2 配置最大空闲连接  代表就算没有人访问这个池子,但我也会最多预备8个连接,这样的话一旦有人来了就可以直接使用不用临时创建
        poolConfig.setMaxIdle(8);
//        1.3 最小空闲连接     代表着如果长时间没有访问这个池子,那我们的池子就会释放,一直释放到0为止
        poolConfig.setMinIdle(0);
//        1.4 等待时长        代表当连接池里没有连接可以使用的时候,我们要不要等待,等待多长时间,默认是-1也就是没有时间限制一直等待到有空闲连接为止
//                           我们这里配置一个最多等待1000毫秒
        poolConfig.setMaxWaitMillis(1000);

//       创建连接池对象   (如果有密码的话,可以在参数列表后面加上密码  这里的1000是超时时间
        jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379,1000);


    }

    public static Jedis getJedis(){
       return jedisPool.getResource();
    }
}

然后我们再改一下我们的建立连接池

    @BeforeEach//测试类中任何一个测试方法执行之前都先执行该注解标注的方法
    void contextLoads() {
//   1.建立连接
//     jedis = new Jedis("127.0.0.1",6379);
        jedis = JedisConnectionFactory.getJedis();
//   2.设置密码
//        jedis.auth("123321");
//   3.选择库  如果我们不选择的话,默认就是选择的0号库
        jedis.select(0);
    }

到现在的小伙伴可能在想,那我们最后执行close方法的时候,不还是销毁了吗?

答案:不是销毁了

我们看一下close的原码文件,当判断我们有连接池的时候就是进入到第一个if,底层并不会真正的close,而是归还return出去了

 

pool.returnBrokenResource(this);
或者是
pool.returnResource(this);

Redis的Java客户端——Jedis_第3张图片

你可能感兴趣的:(Redis,1024程序员节,redis,缓存,开发语言,java)