All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dennisit.vplus.data.cache.RedisCacheRepository Maven / Gradle / Ivy

There is a newer version: 2.0.8
Show newest version
/*--------------------------------------------------------------------------
 *  Copyright (c) 2010-2020, Elon.su All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * Neither the name of the elon developer nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * Author: Elon.su, you can also mail [email protected]
 *--------------------------------------------------------------------------
 */
package com.github.dennisit.vplus.data.cache;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.Assert;

import java.util.Optional;

/**
 * Created by Elon.su on 2018/3/1.
 */
public class RedisCacheRepository implements CacheRepository {

    private boolean cachable;

    private RedisTemplate redisTemplate;

    public RedisCacheRepository(RedisTemplate redisTemplate) {
        this(true, redisTemplate);
    }

    public RedisCacheRepository(boolean cacheable, RedisTemplate redisTemplate) {
        this.cachable = cacheable;
        this.redisTemplate = redisTemplate;
    }

    @Override
    public boolean clearCache(String cacheKey) {
        Assert.notNull(cacheKey, "found null cacheKey");

        if (!isCachable()) {
            return true;
        }
        return redisTemplate.delete(cacheKey);
    }

    @Override
    public  T getCache(String cacheKey, Class clazz, CacheNotFound cacheNotFound) {
        Assert.notNull(cacheKey, "found null cacheKey");

        if (!isCachable() && null != cacheNotFound) {
            return cacheNotFound.execute();
        }

        T value = (T) redisTemplate.opsForValue().get(cacheKey);
        if (null != value) {
            return value;
        }

        return Optional.ofNullable(cacheNotFound).map(x -> x.execute()).orElse(null);
    }


    @Override
    public  T setCache(String cacheKey, T cacheValue, int millisExpireTime) {
        Assert.notNull(cacheKey, "found null cacheKey");

        if (!isCachable()) {
            return cacheValue;
        }

        redisTemplate.opsForValue().set(cacheKey, cacheValue, millisExpireTime);

        return cacheValue;
    }

    public boolean isCachable() {
        return this.cachable;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy