Java8优化优先检索缓存的代码

1、模拟Redis的缓存客户端
提供优化首先从缓存获取、缓存取不到则从数据获取并更新缓存的方法。


import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.function.Supplier;

/**
 * @author: wangyingjie1
 * @version: 1.0
 * @createdate: 2017-09-21 10:52
 */
public class RedisCache {

    //模拟Redis 缓存
    private Map<String, Object> map = new HashMap<>();

    /**
     * 首先从缓存获取、缓存取不到则从数据获取并更新缓存
     *
     * @param supplier
     * @param key      缓存key
     * @param exp      过期时间
     * @param <T>
     * @return
     */
    public <T> T getCacheFirst(Supplier<T> supplier, String key, long exp) {
        T obj = (T) getObject(key);
        if (obj != null) {
            return obj;
        }

        obj = supplier.get();

        if (Objects.nonNull(obj)) {
            setObject(key, obj, exp);
        }

        return obj;
    }

    /**
     * @param key
     * @param obj
     * @param exp redis失效时间
     * @param <T>
     */
    public <T> void setObject(String key, T obj, long exp) {
        map.put(key, obj);
    }

    public Object getObject(String key) {
        return map.get(key);
    }

}

2、测试代码


import org.junit.Test;

import java.util.Objects;

/**
 * 使用Java8优化优先查缓存的代码
 *
 * @author: wangyingjie1
 * @version: 1.0
 * @createdate: 2017-09-21 10:50
 */
public class RedisCacheTest {

    private RedisCache redisCache = new RedisCache();

    //优化缓存的使用
    @Test
    public void testCache() {

        //java8 before
        Object data = getFirstCacheData();
        System.out.println("data=====>" + data);

        //java8
        String value = redisCache.getCacheFirst(() -> getDateFromDB(), "key", 100);

        System.out.println("value=====>" + value);
    }

    //优先从缓存获取数据,如果缓存不存在则从数据库、接口进行获取数据
    private Object getFirstCacheData() {
        Object value1 = redisCache.getObject("key1");
        String data = null;
        if (Objects.isNull(value1)) {
            data = getDateFromDB();
            if (Objects.isNull(null)) {
                redisCache.setObject("key1", data, 10000);
            }
        }
        return data;
    }

    private String getDateFromDB() {
        //todo 可以从数据库、接口进行检索数据

        return "Hello World";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值