• Jedis详解


    简述

      jedis是一款java操作redis数据库的工具,有点类似于jdbc

    使用准备

      我们首先需要导入jedis的jar包,有两个:

    对5种数据的操作

      Jedis类用于java程序和redis数据库进行交互,一个最简单的程序就是用java往redis里放数据,注意Jedis类的构造方法如果使用的是空参构造则默认值为自己的ip和6379端口,若要连接别人的数据库则要用别人的ip和端口

    //1.获取连接
    Jedis jedis = new Jedis("localhost",6379);
    //2.调用对应的方法操作
    jedis.set("username","zhangsan");
    String username = jedis.get("username");
    //3.关闭连接
    jedis.close();

      可以使用Jedis操作redis的各种数据结构,需要知道的是jedis的方法和我们用命令操作redis是相似的

    string类型

    //1.获取连接
    Jedis jedis = new Jedis("localhost",6379);
    //2.调用对应的方法操作
    jedis.set("username","zhangsan");
    String username = jedis.get("username");
    //可存储指定过期时间的数据
    jedis.setex("activeCode",20,"valueString");
    System.out.println(username);
    //3.关闭连接
    jedis.close();

    Hash类型

    //1.获取连接
    Jedis jedis = new Jedis("localhost",6379);
    //2.调用对应的方法操作
    //存储hash
    jedis.hset("user","name","zhangsan");
    jedis.hset("user","age","23");
    jedis.hset("user","gender","male");
    //获取单个hash数据
    String name = jedis.hget("user", "name");
    System.out.println(name);
    //获取hash的所有map中的数据
    Map<String,String> user = jedis.hgetAll("user");
    for (String key : user.keySet()) {
        String value = user.get(key);
        System.out.println(key+":"+value);
    }
    //3.关闭连接
    jedis.close();

    列表类型

    //1.获取连接
    Jedis jedis = new Jedis("localhost",6379);
    //2.调用对应的方法操作
    //一次可以存多个值
    jedis.lpush("mylist","a","b","c");//从左边存
    jedis.rpush("mylist","a","b","c");//从右边存
    //获取数据
    List<String> mylist = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist);
    String element1 = jedis.lpop("mylist");
    System.out.println(element1);
    //3.关闭连接
    jedis.close();

    set类型

    //1.获取连接
    Jedis jedis = new Jedis("localhost",6379);
    //2.调用对应的方法操作
    jedis.sadd("myset","java","php","cpp");
    Set<String> myset = jedis.smembers("myset");
    System.out.println(myset);
    //3.关闭连接
    jedis.close();

    有序set类型

    //1.获取连接
    Jedis jedis = new Jedis("localhost",6379);
    //2.调用对应的方法操作
    jedis.zadd("mysortedset",3,"亚索");
    jedis.zadd("mysortedset",5,"盖伦");
    jedis.zadd("mysortedset",4,"猴子");
    Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
    System.out.println(mysortedset);
    //3.关闭连接
    jedis.close();

    jedis连接池

      jedis的连接池叫JedisPool,在创建连接池后我们可以从连接池中获取连接,客户端连接Redis使用的是TCP协议,直连的方式每次需要建立TCP连接,而连接池的方式是可以预先初始化好Jedis连接,所以每次只需要从Jedis连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。

       用连接池的一次普通的流程:

    //创建配置对象
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(50);//最大的连接数50
    config.setMaxIdle(10);//最大的空闲连接数
    
    //创建jedis连接池对象
    JedisPool jedisPool = new JedisPool(config,"localhost",6379);
    //获取连接
    Jedis jedis = jedisPool.getResource();
    //使用连接
    jedis.set("username","hehe");
    //关闭、归还连接到连接池中
    jedis.close();

      将来实际应用的难点在于参数的配置:

    #最大活动对象数     
    redis.pool.maxTotal=1000    
    #最大能够保持idel状态的对象数      
    redis.pool.maxIdle=100  
    #最小能够保持idel状态的对象数   
    redis.pool.minIdle=50    
    #当池内没有返回对象时,最大等待时间    
    redis.pool.maxWaitMillis=10000    
    #当调用borrow Object方法时,是否进行有效性检查    
    redis.pool.testOnBorrow=true    
    #当调用return Object方法时,是否进行有效性检查    
    redis.pool.testOnReturn=true  
    #“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.  
    redis.pool.timeBetweenEvictionRunsMillis=30000  
    #向调用者输出“链接”对象时,是否检测它的空闲超时;  
    redis.pool.testWhileIdle=true  
    # 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.  
    redis.pool.numTestsPerEvictionRun=50  
    #redis服务器的IP    
    redis.ip=xxxxxx  
    #redis服务器的Port    
    redis1.port=6379   

    连接池工具类

      如果把配置放在代码里的话耦合度会比较高,所以一般我们把配置放在配置文件中,这样要使用的时候加载配置即可。加载配置我们在工具类的静态代码块中执行:

    package util;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    /**
     * Jedis连接池的工具类
     * 加载配置文件,配置连接池的参数
     * 提供获取连接的方法
     */
    public class JedisPoolUtils {
        private static JedisPool jedisPool;
    
        static{
            //获取输入流
            InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
            //创建properties对象
            Properties properties = new Properties();
            try {
                properties.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //获取数据、设置到JedisPoolConfig中
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
            jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
            String host = properties.getProperty("host");
            Integer port = Integer.parseInt(properties.getProperty("port"));
            System.out.println(host+","+port);
            jedisPool = new JedisPool(jedisPoolConfig,host,port);
        }
    
        /**
         * 获取连接的方法
         */
        public static Jedis getJedis(){
            return jedisPool.getResource();
        }
    }
    一点一点积累,一点一点蜕变!
  • 相关阅读:
    每周总结13
    每周总结12
    每周总结11
    每周总结10
    每周总结9
    启明5-1总结
    启明4-30团队进度博客
    期末总结
    每日日报2021.6.11
    每日日报2021.6.10
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/14963289.html
Copyright © 2020-2023  润新知