自动任务平台:作为一个专门跑任务的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 指定