龙空技术网

Java加载下级平台数据库数据到redis内存

lehoon 166

前言:

今天你们对“oracle 加载数据库”大致比较看重,咱们都需要剖析一些“oracle 加载数据库”的相关资讯。那么小编也在网上网罗了一些有关“oracle 加载数据库””的相关资讯,希望朋友们能喜欢,小伙伴们快快来了解一下吧!

背景

由于在网关中需要对接入的下级平台进行识别校验,只有合法认证的下级平台才会接入到网关中,为了提高数据查询效率,我们不能每次都需要查询数据库,所以我们在早期使用了redis作为下级平台缓存,每次需要查询的时候,都从redis查询有没有该下级平台。如果有则进行接入服务,如果没有在我们系统中注册过,则认为是一个非法接入的下级平台,不允许其接入。

Redis设计规范

实现

通过新建一个maven工程,打包jar包,然后每次系统启动前运行一次,一次把所有接入认证的下级平台加载到redis中,主要代码包括main函数和load方法,如下:

   private GlobalMemoryCache cacheHandler = null;    private OracleDataBaseModule dataBaseModule = null;    public void init(){        DOMConfigurator.configureAndWatch("etc/log4j.xml");        dataBaseModule = new OracleDataBaseModule();        JdbcTemplate jdbcTemplate = (JdbcTemplate) GlobalApplicationContext.getBean("jdbcTemplate");        dataBaseModule.setJdbcTemplate(jdbcTemplate);        cacheHandler = (GlobalMemoryCache) GlobalApplicationContext.getBean("cacheHandler");    }    public void doProcess(){        doLoadDeviceMemory();        doLoadSubPlateform();    }    public void doLoadSubPlateform() {        List<SubPlateformEntity> subPlateformList = dataBaseModule.querySubPlateformList();        cacheHandler.addValidSubPlateformList(subPlateformList);    }    public void setCacheHandler(GlobalMemoryCache cacheHandler) {        this.cacheHandler = cacheHandler;    }    public static void main(String[] args) {        Uapmm uapmm = new Uapmm();        uapmm.setCacheHandler((GlobalMemoryCache) GlobalApplicationContext.getBean("cacheHandler"));        uapmm.init();        uapmm.doProcess();    }

redis加载代码

    /**     * 首先把所有数据清理掉     */    public void delValidSubPlateformList(final String accessKey) {        final Jedis jedis = getResource();        if(jedis == null) {            return;        }        jedis.expire("dpf:string:subplatform:profile:" +  accessKey,0);        releaseResource(jedis);    }    /**     * 加载下级平台数据到redis中     */    public void addValidSubPlateformList(final List<SubPlateformEntity> subPlateformList) {        if(subPlateformList == null || subPlateformList.isEmpty()) {            return;        }        final Jedis jedis = getResource();        if(jedis == null) {            return;        }        Transaction t = jedis.multi();        for(SubPlateformEntity subPlateform : subPlateformList) {            System.out.println(subPlateform.toString());            t.set("dpf:string:subplatform:profile:" + subPlateform.getAccesskey(), JSONObject.toJSONString(subPlateform));        }        t.exec();        releaseResource(jedis);    }

网关代码

int TransportUnit::HandleLogin(const byte* buf, int len) {	if (len < 24) {		return BaseUnit::kError;	}	char access_key[8 + 1] = {0};	char access_secret[8 + 1] = {0};	strncpy(access_key, (const char *) buf + 7, 8);	strncpy(access_secret, (const char *) buf + 15, 8);    RedisClient * redis_client = session_->GetUM()->GetRedisInstance();    if(redis_client == NULL) {        gw_log_info("redis server connect error.");        return BaseUnit::kError;    }	Message* m = NULL;	char command[64] = {0};	sprintf(command, "dpf:string:subplatform:profile:%s", access_key);	std::string result = redis_client->GetString((const char *) command);	if(result.empty()) {		gw_log_info("TransportUnit::HandleLogin can not find the subplate info. accesskey=[%s]", access_key);		GenerateLoginAck(&m, buf, 1);		if(m != NULL) {			session_->SendDownMessage(m);			return BaseUnit::kSuccess;		}	}	rapidjson::Document document;	if(document.Parse(result.c_str()).HasParseError()) {		GenerateLoginAck(&m, buf, 0);	} else {		std::string pwd = document["accesssecret"].GetString();		if(strncmp(access_secret, pwd.c_str(), strlen(access_secret)) == 0) {			GenerateLoginAck(&m, buf, 0);		} else {			GenerateLoginAck(&m, buf, 1);		}	}	if(m != NULL) {		session_->SendDownMessage(m);	}    id_ = document["id"].GetInt();	document["state"].SetInt(1);	document["logintm"].SetInt(current_time());	rapidjson::StringBuffer buffer;	rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);	document.Accept(writer);	std::string result_json = buffer.GetString();	memset(command, 0, 64);	sprintf(command, "dpf:string:platform:profile:%s", access_key);	redis_client->SetString((const char *) command, result_json.c_str());	key_.assign(access_key, 8);	session_->HandleLogin(key_, id_);	is_login_ = true;	return BaseUnit::kSuccess;}

通过redis实现了获取下级平台信息及更新下级平台登陆信息功能。

标签: #oracle 加载数据库