使用

RichAsyncFunction 加 CacheBuilder


CacheBuilder.newBuilder()
//最多存储10000条
.maximumSize(10000)
//过期时间为1分钟
.expireAfterWrite(60, TimeUnit.SECONDS)
.build();
public class LRU extends RichAsyncFunction<String,Order> {
private static final Logger LOGGER = LoggerFactory.getLogger(LRU.class);
String table = "info";
Cache<String, String> cache = null;
private HBaseClient client = null;
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
//创建hbase客户端
client = new HBaseClient("127.0.0.1","7071");
cache = CacheBuilder.newBuilder()
//最多存储10000条
.maximumSize(10000)
//过期时间为1分钟
.expireAfterWrite(60, TimeUnit.SECONDS)
.build();
}
@Override
public void asyncInvoke(String input, ResultFuture<Order> resultFuture) throws Exception {
JSONObject jsonObject = JSONObject.parseObject(input);
Integer cityId = jsonObject.getInteger("city_id");
String userName = jsonObject.getString("user_name");
String items = jsonObject.getString("items");
//读缓存
String cacheCityName = cache.getIfPresent(cityId);
//如果缓存获取失败再从hbase获取维度数据
if(cacheCityName != null){
Order order = new Order();
order.setCityId(cityId);
order.setItems(items);
order.setUserName(userName);
order.setCityName(cacheCityName);
resultFuture.complete(Collections.singleton(order));
}else {
client.get(new GetRequest(table,String.valueOf(cityId))).addCallback((Callback<String, ArrayList<KeyValue>>) arg -> {
for (KeyValue kv : arg) {
String value = new String(kv.value());
Order order = new Order();
order.setCityId(cityId);
order.setItems(items);
order.setUserName(userName);
order.setCityName(value);
resultFuture.complete(Collections.singleton(order));
cache.put(String.valueOf(cityId), value);
}
return null;
});
}
}
}

最新文章

  1. 利用NuSoap开发WebService(PHP)
  2. MVC区域 视图必须派生自 WebViewPage 或 WebViewPage&lt;TModel&gt;
  3. PHP 错误与异常 笔记与总结(4)通过 trigger_error 触发 PHP 错误
  4. Leveldb Advanced
  5. H - Highways - poj 1751(prim)
  6. 对于js原型和原型链继承的简单理解(第三种,复制继承)
  7. QT 自动获取可用串口
  8. Xcode插件(一)-规范注释生成器VVDocumenter
  9. 201521123014 《Java程序设计》第14周学习总结
  10. JAVA几种常见的编码格式(转)
  11. [Hdu1342] Lotto
  12. 跟我一起学opencv 第四课之图像的基本操作
  13. JS 设计模式一 -- 原型模式
  14. SpringBoot整合Druid(阿里巴巴)数据源
  15. EvalAI使用——类似kaggle的开源平台,不过没有kernel fork功能,比较蛋疼
  16. py request.post header
  17. Next.js v4.1.4 文档中文翻译【转载】
  18. form图片上传遇到错误
  19. 新闻编辑室第三季/全集The Newsroom迅雷下载
  20. Android.mk遍历子目录所有文件

热门文章

  1. 面试阿里,字节跳动99%会被问到的java线程和线程池,看完这篇你就懂了!
  2. FL Studio附加快捷面板讲解
  3. Unable to locate package python3 错误解决办法
  4. pip更新报错问题
  5. selenium如何处理H5视频
  6. day008|python之函数
  7. java数组作为函数返回值
  8. java导出excel并且压缩成zip上传到oss,并下载,使用字节流去存储,不用文件流保存文件到本地
  9. UPX使用教程
  10. 【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号