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

本文介绍了一个基于Java的自动任务平台,该平台利用Redis连接池和队列来执行定时任务。通过配置Redis连接池参数,如最大连接数和超时时间,确保高效稳定的数据交互。平台使用Redis的rpop和lpush操作实现实时任务的添加和消费,以及通过http的POST请求调用指定URL来完成接口任务。
摘要由CSDN通过智能技术生成

 自动任务平台:作为一个专门跑任务的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<byte[]> bytes = jedis.lrange(queueName.getBytes(), 0, -1); 根据队列名获取队里中所有数据: Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定
  
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值