nodejs的redis工具類

做一個工具時,起初用到redis,後來發現有更好的解決方案,遂放棄redis,但辛辛苦苦寫的code不捨得刪,這裏記錄下

nodejs

/**
 * Created by shangchengcai on 2018/1/9.
 */
/**
 * Module dependencies.
 */
var ioredis = require('ioredis');
var redis   = require('redis');
var conf=require("../conf/arconf.json");
var logger=require("../util/LogUtil").LOGGER;
var client;

/**
 * config redis client by redis deploy type
 */
switch (conf.redisDeployType){
    case "single":
        var redisconf=conf.redisAddress[0];
        client=redis.createClient(redisconf.port, redisconf.host);
        break;
    case "cluster":
        client=new ioredis.Cluster(conf.redisAddress);
        break;
    default:
        throw new Error("redisDeployType only can be single or cluster");
        break;

}

/**
 * create redis client err
 */
client.on("error", function(error) {
    logger.error(error);
});

/**
 * get hash key fields
 */
function get(key,callback){
    client.hscan(key,0, function (err, res) {
        callback(err,res[1]);
    });
}

/**
 * remove hash key field
 */
function remove(key,field){
    client.hdel(key,field, function (err, res) {
        if(err){
            logger.info(err);
        }
        logger.info("remove faild host for key="+key+" and field="+field+" excute success!redis return code is "+(res===0?"faild,because redis aready don't contains this key!":"success!"));
    });
}

/**
 * close redis cluster client
 */
function close(){
    client.quit(function(){
        logger.info("close redis success!");
    });
}
function scan(key,callback){
    client.scan("0","MATCH","data_sync.voole.com*",function (err, res) {
        console.log(res);
        callback(err,res[1]);
    });
}

scan("data_*",function(err,data){
    //console.log(data);
    close();
})



/**
 * export get、remove、close
 */
exports.get=get;
exports.remove=remove;
exports.close=close;

java

package com.scc.ar.client.redis;

import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @ClassName: SchedulerUtil
 * @Description: TODO(這裏用一句話描述這個類的作用)
 * @author [email protected]
 * @date 2018年1月12日 下午5:39:24
 * 
 */
public class RedisUtil {
	private static final Logger LOGGER = LoggerFactory.getLogger(RedisUtil.class);
	private static final String TRIGGER_NAME = "AR_CLIENT_TRIGGER";
	private static final String TRIGGER_GROUP = "AR_CLIENT_TRIGGER_GROUP";
	private static final String JOB_NAME = "AR_CLIENT_JOB";
	private static final String JOB_GROUP = "AR_CLIENT_JOB_GROUP";
	private static Scheduler scheduler = null;
	private static RedisUtil schedulerUtil;

	/**
	 * <p>
	 * Title:
	 * </p>
	 * <p>
	 * Description:
	 * </p>
	 * 
	 * @author [email protected]
	 * @date 2018年1月12日 下午6:07:52
	 */
	private RedisUtil() {
	}

	static {
		try {
			scheduler = StdSchedulerFactory.getDefaultScheduler();
		} catch (SchedulerException e) {
			e.printStackTrace();
			LOGGER.error(e.getMessage(), e);
			System.exit(1);
		}
	}

	public static synchronized RedisUtil build() {
		if (null == schedulerUtil) {
			schedulerUtil = new RedisUtil();
		}
		return schedulerUtil;
	}

	public <T extends Job> RedisUtil addJob(Class<T> jobclass, int interval) {
		try {
			Trigger trigger = TriggerBuilder.newTrigger().withIdentity(TRIGGER_NAME, TRIGGER_GROUP).startNow()
					.withSchedule(
							SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(interval).repeatForever())
					.build();
			JobDetail job = JobBuilder.newJob(jobclass).withIdentity(JOB_NAME, JOB_GROUP).build();
			scheduler.scheduleJob(job, trigger);
		} catch (SchedulerException e) {
			e.printStackTrace();
			LOGGER.error(e.getMessage(), e);
		}
		return this;
	}

	public void start() {
		try {
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
			LOGGER.error(e.getMessage(), e);
		}
	}

	public void close() {
		try {
			scheduler.shutdown();
		} catch (SchedulerException e) {
			e.printStackTrace();
			LOGGER.error(e.getMessage(), e);
		}
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章