com.github.dennisit.vplus.data.cache.RedisCacheRepository Maven / Gradle / Ivy
/*--------------------------------------------------------------------------
* 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;
}
}