实战项目——redis连接池、redis队列应用

 自动任务平台:作为一个专门跑任务的java项目,利用㈠redis连接池、㈡redis队列一端取一端存的队列属性 ,㈢conn时间表达式 ,㈣http的post调其他url的方式 ,完成了在conn指定的时间去调用值定的URL来完成指定的接口任务。

  redis连接池
  ①连接池配置
  ## connection
  redis.host =10.128.22.168
  redis.port =6379
  redis.timeout =2000
  redis.password =redis123
  redis.database =0
  ## properties
  redis.maxTotal = -1
  redis.maxIdle = 200
  redis.maxWaitMillis = 100
  redis.minEvictableIdleTimeMillis = 864000000
  redis.minIdle = 100
  redis.numTestsPerEvictionRun = 10
  redis.lifo = false
  redis.softMinEvictableIdleTimeMillis = 10
  redis.testOnBorrow = true
  redis.testOnReturn = false
  redis.testWhileIdle = false
  redis.timeBetweenEvictionRunsMillis = 300000
  redis.blockWhenExhausted = true

  ②start静态初始化
  public void start ( Properties props ) throws CacheException{
    JedisPoolConfig config = new JedisPoolConfig ( );
    host = getProperty ("redis.host");
    password = getProperty ();
    port = getProperty ();
    timeout = getProperty ()
    database = getProperty ();
        
    config.setBlockWhenExhausted ()
    config.setMaxIdle ()                     控制一个pool最多有多少个状态为idle(空闲)的jedis实例
    config.setMinIdle ()
    config.setMaxActive();                   控制一个pool可分配多少个jedis实例
    config.setMaxTotal ()
    config.setMaxWaitMillis ()
    config.setTestWhileIdle ()               如果为true,表示有一个idle object evitor线程对idle object进行扫描
    config.setTestOnBorrow ()                如果为true,则得到的jedis实例均是可用的
    config.setTestOnReturn ()                return 一个jedis实例给pool时,是否检查连接可用性
    config.setNumTestsPerEvictionRun ()      如果为true,表示有一个idle object evitor线程对idle object进行扫描
    config.setMinEvictableIdleTimeMillis ()  表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐
    config.setSoftMinEvictableIdleTimeMillis ()  
    config.setTimeBetweenEvictionRunsMillis ()
    config.setLifo ();                       返回对象时,是采用DEFAULT_LIFO(last in first out,即类似cache的最频繁使用队列),如果为False,则表示FIFO队列
    pool = new JedisPool ( config , host , port , timeout , password , database ); 
  }

  ③redis获取数据
  //连接池获取redis实例
  public static Jedis getResource ( ){
    return pool.getResource ( );
  }
  //Obj转换byte
  public byte[] serialize ( Object obj ) throws IOException{
    ObjectOutputStream oos = null;
    ByteArrayOutputStream baos = new ByteArrayOutputStream ( );
    oos = new ObjectOutputStream ( baos );
    oos.writeObject ( obj );
    return baos.toByteArray ( );
  }
  //byte转换Obj
  public Object deserialize ( byte[] bits ) throws IOException{
    ObjectInputStream ois = null;
    ByteArrayInputStream bais = new ByteArrayInputStream ( bits );
    ois = new ObjectInputStream ( bais );
    return ois.readObject ( );
  }
  //获取redis实例-->获取redis数据-->将byte转成Obj
  {
          jedis = MyRedisPool.getResource();
    byte[] taskByte = jedis.rpop(queueName.getBytes());
    Object obj = utils.deserialize(taskByte);
  }

  ④redis作为队列的应用
  jedis.rpop(queueName.getBytes())  根据队列名获取队里中的一条数据并移除:rpop用于移除列表的最后一个元素,返回值为移除的元素。
  jedis.lpush(queueName.getBytes(), utils.serialize(Object obj))  加入队列:存储REDIS队列 顺序存储 byte类型
  List bytes = jedis.lrange(queueName.getBytes(), 0, -1); 根据队列名获取队里中所有数据: Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定
  
 

你可能感兴趣的:(Work,队列,java,redis,jedis)