zoukankan      html  css  js  c++  java
  • redis 学习(8)-- redis 客户端 -- Jedis

    redis 客户端 -- Jedis

    1. Jedis 直连

    本质是 TCP 连接。

    执行流程

    1. 创建Jedis对象
    2. 通过Jedis执行命令
    3. 返回Jedis执行结果
    4. 关闭Jedis连接

    demo

    要使用 Jedis,首先我们需要安装 maven 依赖。

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

    创建一个简单的 Jedis 直连的小例子:

    import redis.clients.jedis.Jedis;
    
    public class TestJedis {
        public static void main(String[] args) {
            // 1.生成一个 Jedis 对象,这个对象负责和指定 Redis 节点进行通信
            Jedis jedis = new Jedis("localhost", 6381);
            // 2. jedis 执行 set 操作
            jedis.set("hello", "world");
            // 3. jedis 执行 get 操作,value=“world”
            String value = jedis.get("hello");
            System.out.println(value);
    
        }
    }
    

    输出结果如下:

    创建 Jedis 的方式

    /**
     *	@param host Redis节点所在机器的IP或域名
     *  @param port Redis服务的端口号
     *  @param connectionTimeout 客户端连接超时时间(毫秒)
     *  @param soTimeout 客户端读写超时时间(毫秒)
     */
    public Jedis(String host , int port , int connectionTimeout , int soTimeout)
    

    更多操作可以参考菜鸟教程 Jedis 教程


    2. Jedis 连接池

    执行流程

    1. 创建一个JedisPool对象
    2. 从资源池中获取一个Jedis对象
    3. 通过Jedis执行命令
    4. 返回Jedis执行结果
    5. 关闭Jedis连接,将Jedis还给资源池

    创建 Jedis 连接池的方式

    JedisPoolConfig config = new JedisPoolConfig();
    JedisPool jedisPool = new JedisPool(config , "127.0.0.1" , 6379);
    Jedis jedis = jedisPool.getResource();
    jedis.close();
    

    demo

    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    
    public class TestJedis {
        public static void main(String[] args) {
            //初始化 Jedis 连接池,通常来说 jedisPool 是单例的。
            GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
            JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6381);
            Jedis jedis = null;
            try {
                // 1. 从连接池获取 Jedis 对象
                jedis = jedisPool.getResource();
                // 2. 执行操作
                jedis.set("hello", "world");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (jedis != null) {
                    // 如果使用 JedisPool,close 操作不是关闭连接,代表归还连接池
                    jedis.close();
                }
            }
    
    
        }
    }
    
    

    3. Jedis 直连 VS Jedis 连接池

    优点 缺点
    Jedis直连 使用简单
    适用于少量长期连接的场景
    存在每次新建/关闭TCP连接的开销
    资源无法控制,存在连接泄露的风险
    Jedis对象线程不安全
    Jedis连接池 Jedis对象预先生成,降低使用开销
    连接池的形式保护和控制资源的使用
    相对于直连,使用相对麻烦
    尤其在资源的管理上需要许多参数保证
    一旦参数不合理会出现很多问题
  • 相关阅读:
    软件设计的哲学:第十七章 一致性
    软件设计的哲学:第十六章 修改现有代码
    软件设计的哲学: 第十五章 先写注释
    软件设计的哲学:第十四章 选个好名字
    软件设计的哲学:第十三章 注释应该描述代码中隐藏的内容
    软件设计的哲学:第二十章 为什么要写注释
    软件设计的哲学:第十一章 两次设计
    软件设计的哲学: 第十章 定义不存在错误
    软件设计的哲学: 第九章 合并还是分解
    软件设计的哲学:第八章 降低复杂性
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10945116.html
Copyright © 2011-2022 走看看