vavr使用

高并发的场景下,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+中一个函数式库,提供了一些不可变数据类型及函数式控制结构。
官方英文文档链接
翻译文档链接

你可能感兴趣的:(vavr使用)