Redis学习 | Redis上手

108 阅读2分钟

这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战

前言

类似与MySQL的连接JDBC一样,Redis也有自己的连接客户端工具Jedis

Jedis

  • JedisJava开发的用来与Redis进行数据交互的客户端工具包。
  • Jedis只是对Redis命令进行封装,可以轻松上手
  • Jedis遵循RESP协议规范开发,具有良好的通用性与可读性

使用

引入依赖

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.6.3</version>
</dependency>

测试用例

@Test
public void testJedis() {
    // 创建连接
    Jedis jedis = new Jedis("81.68.234.218", 6379, 1000);
    try {
        // 设置登录密码
        jedis.auth("123456");
        // 选择数据库
        jedis.select(1);
        // 设置值
        jedis.set("hello", "world");
        String hello = jedis.get("hello");
        System.out.println(hello);
    } catch (Exception e) {
        throw e;
    } finally {
        jedis.close();
    }
}

使用之前安装的可视化工具验证结果AnotherRedisDesktopManager安装

image.png

正如示例所示,连接使用非常简单,并且方法名就是用客户端的指令来命名的,学习起来也没有什么障碍。我们只需要将精力放在业务上。

JedisPool

image.png

  1. 从连接池借Jedis对象
  2. Jedis执行命令
  3. 返回执行结果
  4. 归还Jedis对象给连接池

测试用例

@Test
public void testJedisPool() {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(100);// 设置连接池中最多允许存放100个jedis连接对象
    jedisPoolConfig.setMaxIdle(100);//设置允许最大空闲连接
    jedisPoolConfig.setMinIdle(10);//设置允许最小空闲连接
    jedisPoolConfig.setTestOnBorrow(false);//借出时校验是否有效,推荐为false
    jedisPoolConfig.setTestOnReturn(false);//归还时校验是否有效
    jedisPoolConfig.setTestOnCreate(false);//创建时校验是否有效
    jedisPoolConfig.setBlockWhenExhausted(true);//连接池无可用jedis,是否等待
    jedisPoolConfig.setMaxWaitMillis(1000);//等待1s,1s后没有空闲的jedis对象就报错

    JedisPool jedisPool = new JedisPool(jedisPoolConfig, "81.68.234.218", 6379);
    Jedis jedis = null;
    try {
        jedis = jedisPool.getResource();//借出一个
        jedis.auth("123456");
        jedis.set("a", "123");
        String a = jedis.get("a");
        System.out.println(a);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (jedis!=null){
            jedis.close();
        }
    }
}

注意:TestOnCreate/Borrow/Return 本地开发时建议设置成false

总结

优点缺点
直连简单粗暴
适用于少量连接的场景
Jedis线程不安全
存在连接泄露的可能
连接池Jedis对象预先生成,降低运行时开销
便于对连接资源进行监管于控制
实用麻烦
参数较多,规划不合理,容易出问题