通过算法小组给出的聚合文件,我们需要实现一种业务场景,通过用户的消费地点的商户ID与posId,查询出他所在的商圈,并通过商圈地点查询出与该区域的做活动的商户,并与之进行消息匹配,推送相应活动信息到用户手机。

那么整个流程分为两步,第一步,将整个聚合文件刷入缓存,文件数据格式如下:

29 1:1 102100156910958 10015691 X有限公司 0 1
29 1:1 102100156910958 10015691 X有限公司 0 1

  字段含义分别是 地区编号、商圈编号、商户编号、Pos编号、商户名称、合作商户标志。那么我们可以通过 商户编号+Post编号 来定位 其所在的商圈, 可以通过 地区编号+商圈编号 来获取该商圈的所有商户信息(Redis中直接set)。于是导入Redis是可使用key:商户编号+Post编号 value:地区编号+商圈编号 。 随之第二个key 为 地区编号+商圈编号 从而得到 该商圈的所有商户(Redis中使用hset)。

将聚合文件导入Redis,,部分代码如下

        String merchantId = StringUtils.join("V_",content[2].trim(),content[3].trim());String areabiz = StringUtils.join(content[0].trim(),content[1].trim());String merchantName = StringUtils.join(content[4].trim());String flag = StringUtils.join(content[5].trim());Map<String,String> MerchantMap = new HashMap<String,String>();MerchantMap.put(merchantName, merchantId);try {for (int i = 0; i < jedisvPools.size(); i++) {JedisPool jp = jedisvPools.get(i);Jedis jedis = null;try {jedis = jp.getResource();//key为商户编号+PosId value为地区编号area+商圈编号bizAreaId
                    jedis.set(merchantId, areabiz);//key为商圈编号+PosId value为商户名称,使用sadd添加相同商圈编号+PosId的商户if("1".equals(flag)){jedis.hmset(areabiz, MerchantMap);}} catch (Exception e) {logger.error("", e);} finally {jedis.close();}}

将需要匹配的活动商户文件及信息导入redis,,部分代码如下

        if (StringUtils.isEmpty(content[4]) || StringUtils.isEmpty(content[5])||StringUtils.isEmpty(content[6])) {logger.warn("数据格式有误,内容为:{}", line);return;}String merchantId = "";String posIds = StringUtils.join(content[5]);String address = StringUtils.join(content[3]);String[] posIdArray = posIds.split("、");String url = content[6];Map<String,String> MerchantUrlAdress = new HashMap<String,String>();MerchantUrlAdress.put(address,url);for(String posId : posIdArray){merchantId = StringUtils.join("Vir_",content[4].trim(),posId.trim());try {for (int i = 0; i < jedisPools.size(); i++) {JedisPool jp = jedisPools.get(i);Jedis jedis = null;try {jedis = jp.getResource();//key为商户编号+PosId value为地区编号area+商圈编号bizAreaId
                        jedis.hmset(merchantId,MerchantUrlAdress);} catch (Exception e) {logger.error("", e);} finally {//jedis.close();
                        jp.returnResourceObject(jedis);}}

接入用户实时刷卡消费信息,流入storm,匹配该用户所在商圈的活动商户,并匹配获取该活动商户的地址及url信息 通过http的形式推送至支付宝或微信渠道,部分代码如下:

            String bizAreaName = "";String bizAreaUrl = "";String address = "";//根据活动商户ID与postId 查询所在商圈String areabiz = virtualBusinessService.getAreaBiz(MerchantId);if(null == areabiz){resultSets.addValue(ResultSets.OpType.INSERT,"BIZAREALISTNAME",bizAreaName);resultSets.addValue(ResultSets.OpType.INSERT, "BIZAREAURL", bizAreaUrl);resultSets.addValue(ResultSets.OpType.INSERT, "BIZADDRESS", address);logger.info("VirtualTradeAreaAlgorithm="+MerchantId);return resultSets;}//根据活动ID,获取该活动配置的商户IdString activityMerchantCode = virtualBusinessService.getActivityConf(activityConfId);//查询所在商圈的所有商户信息Map<String,String> bizAreaNameMap = virtualBusinessService.getbizAreaNameSet(areabiz);if(!bizAreaNameMap.isEmpty()){//匹配活动配置的商户for(String bizName : bizAreaNameMap.keySet()){String mapvalue = bizAreaNameMap.get(bizName).replace("V_", "");if(activityMerchantCode.contains(mapvalue)){bizAreaName = bizName;//根据活动商户名称查询该商户对应的商户IDactivityMerchantId = bizAreaNameMap.get(bizName).replace("V_","Vir_");//根据活动商户Id,查询该活动商户的url Vir_89811144816144501080209Map<String,String> bizAreaUrlAdree = virtualBusinessService.getBizUrl(activityMerchantId);if(null == bizAreaUrlAdree){address = "";bizAreaUrl = "";}else{for(String bizAdress : bizAreaUrlAdree.keySet()){address = bizAdress;bizAreaUrl = bizAreaUrlAdree.get(bizAdress);}}break;}}}                                    

具体还在整理,后续将其补全~

基于Redis、Storm的实时数据查询实践相关推荐

  1. 实时数据产品实践——美团大交通战场沙盘

    背景 大数据时代,数据的重要性不言而喻,尤其对于互联网公司,随着业务的快速变化,商业模式的不断创新.用户体验个性化.实时化需求日益突出,海量数据实时处理在商业方面的需求越来越大.如何通过数据快速分析出 ...

  2. 知乎用户画像与实时数据架构实践

    大家好,我是云祁! 今天和大家分享知乎侯容老师关于用户画像和实时数据架构实践的干货. 侯容:知乎数据赋能组 Leader,主要负责实时数据.用户理解方向. 一.前言 ‍‍‍‍‍‍‍‍知乎业务中,随着各 ...

  3. 阿里1688实时数据工程实践

    导读:在天猫.淘宝网购过程中,商品的推荐与广告的前端展示是怎样的?两者的底层数据服务又是怎样构建的?今天跟大家讲述面向阿里1688业务的实时数据工程实践. 本次分享主要分为三部分:首先讲解实时数据工程 ...

  4. ​inotify+rsync实时数据同步实践讲解17

    inotify+rsync实时数据同步实践讲解17说明:本文来自来自北京老男孩linux运维实战培训中心-运维就业课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.bl ...

  5. 基于android公交车线路查询论文文献,基于Android手机的实时公交查询系统设计与实现...

    龙源期刊网 http://doc.xuehai.net 基于Android手机的实时公交查询系统设计与实现 作者:郭宏昌 来源:<物联网技术>2015年第11期 摘要:为了提高城市公交的智 ...

  6. 基于PCA与LDA的数据降维实践

    基于PCA与LDA的数据降维实践 描述 数据降维(Dimension Reduction)是降低数据冗余.消除噪音数据的干扰.提取有效特征.提升模型的效率和准确性的有效途径, PCA(主成分分析)和L ...

  7. elasticsearch 数据类型_基于 MySQL Binlog 的 Elasticsearch 数据同步实践

    来源;马蜂窝 一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存 ...

  8. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践

    一.为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数 ...

  9. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原

    一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...

最新文章

  1. 详解AI加速器(最终篇):给想进入赛道的玩家一些建议
  2. 多态Poly中的向上/下转型 Upcast/Downcast
  3. linux系统中cache清理/释放命令
  4. MyBatis:事务回滚
  5. Leetcode--113. 路径总和Ⅱ
  6. 图论 —— 最短路 —— Bellman-Ford 算法与 SPFA
  7. GDI对象泄漏检查的一点经验
  8. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
  9. java assert可以检查exception吗_PETCT检查可以排查大肠癌吗?
  10. SQL SERVER 查找某个字符在字符串中出现的次数
  11. linux下运行jar
  12. MySQL事务的保证机制
  13. 使用OpenSSL自建CA及颁发证书、吊销证书
  14. 巧用二重积分的积分中值定理
  15. EXCEL完成一个柱形图与折线图组合图表
  16. 在线随机密码生成器源码
  17. 计算机网络第一章学习通题目及答案
  18. roboguide仿真 机器人轨迹绕圈走
  19. 正则,异常、Collection、List集合
  20. 互联网重提内容为王?学Netflix(奈飞)做好内容营销

热门文章

  1. 基础的shell编程问题(二)
  2. (十)nodejs循序渐进-高性能游戏服务器框架pomelo之介绍和安装篇
  3. key_t IPC键和ftok函数详解和剖析
  4. 机器学习模型评分总结(sklearn)
  5. netflow流量分析工具 linux,Centos5/Linux安装Nfdump和Nfsen图形界面分析netflow数据
  6. 云OS:Linux在桌面打翻身仗的机会?
  7. 看脸色知体内各积毒 有效清洁内脏妙方
  8. springCloud - 第12篇 - 服务监控 Hystrix 面板
  9. “ 紫手环的力量 ” :我想,美好的生活应该是自已造就的...
  10. VS Code 的常用快捷键