zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    一点一点积累,一点一点蜕变!
  • 相关阅读:
    Unity The Method Signature Matching Rule
    Unity The Property Matching Rule
    Unity The Type Matching Rule
    Unity The Custom Attribute Matching Rule
    Unity The Member Name Matching Rule
    Unity No Policies
    Unity The Return Type Matching Rule
    Unity The Parameter Type Matching Rule
    Unity The Namespace Matching Rule
    关于TSQL递归查询的(转)
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/14963289.html
Copyright © 2011-2022 走看看