前言:
今天你们对“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 加载数据库