vavr使用

2019-07-14 00:50发布

高并发的场景下,DB前置缓存是常用的一种解决方案。
通常做法是将从DB查询出的值放入缓存(分布式缓存或者本地缓存都可以),下次请求时先从缓存取数据,如果获取不到,再从DB查询;但是如果查询结果本就为空,缓存里会落空值,这样会导致请求还是全部落到DB,这时候就需要在DB放置一个空对象。
我们可以使用guava的Optional类,也可以自己定义一个实现了Serializable接口的result类用来存放空对象,正好最近接触到了vavr,所以尝试使用了一下vavr中的Option类。 部分代码如下 public MyObject queryMyObjectById(String id) { //根据主键id从缓存获取数据 Option option = (Option)cacheManager.getObject(id); if (option != null) { return option.getOrNull(); } else { MyObject myObject = myObjectDAO.queryMyObjectById(id); //如果查询为空,放入空对象,防止所有查询为空的结果落到DB上 cacheManager.put(id, Option.of(myObject)); return myObject; } } Vavr 是Java 8+中一个函数式库,提供了一些不可变数据类型及函数式控制结构。
官方英文文档链接
翻译文档链接