Feature - RedissonSpringCacheNativeManager implemented
parent
d47ca52133
commit
2972b249bc
@ -0,0 +1,146 @@
|
||||
/**
|
||||
* Copyright (c) 2013-2024 Nikita Koksharov
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.redisson.spring.cache;
|
||||
|
||||
import org.redisson.MapCacheNativeWrapper;
|
||||
import org.redisson.Redisson;
|
||||
import org.redisson.api.RMap;
|
||||
import org.redisson.api.RMapCache;
|
||||
import org.redisson.api.RMapCacheNative;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.redisson.client.codec.Codec;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.context.ResourceLoaderAware;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* A {@link CacheManager} implementation
|
||||
* backed by Redisson instance.
|
||||
*
|
||||
* @author Nikita Koksharov
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class RedissonSpringCacheNativeManager extends RedissonSpringCacheManager implements CacheManager, ResourceLoaderAware, InitializingBean {
|
||||
|
||||
/**
|
||||
* Creates CacheManager supplied by Redisson instance
|
||||
*
|
||||
* @param redisson object
|
||||
*/
|
||||
public RedissonSpringCacheNativeManager(RedissonClient redisson) {
|
||||
this(redisson, (String) null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates CacheManager supplied by Redisson instance and
|
||||
* Cache config mapped by Cache name
|
||||
*
|
||||
* @param redisson object
|
||||
* @param config object
|
||||
*/
|
||||
public RedissonSpringCacheNativeManager(RedissonClient redisson, Map<String, ? extends CacheConfig> config) {
|
||||
this(redisson, config, null);
|
||||
validateProps();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates CacheManager supplied by Redisson instance, Codec instance
|
||||
* and Cache config mapped by Cache name.
|
||||
* <p>
|
||||
* Each Cache instance share one Codec instance.
|
||||
*
|
||||
* @param redisson object
|
||||
* @param config object
|
||||
* @param codec object
|
||||
*/
|
||||
public RedissonSpringCacheNativeManager(RedissonClient redisson, Map<String, ? extends CacheConfig> config, Codec codec) {
|
||||
super(redisson, config, codec);
|
||||
validateProps();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates CacheManager supplied by Redisson instance
|
||||
* and Cache config mapped by Cache name.
|
||||
* <p>
|
||||
* Loads the config file from the class path, interpreting plain paths as class path resource names
|
||||
* that include the package path (e.g. "mypackage/myresource.txt").
|
||||
*
|
||||
* @param redisson object
|
||||
* @param configLocation path
|
||||
*/
|
||||
public RedissonSpringCacheNativeManager(RedissonClient redisson, String configLocation) {
|
||||
this(redisson, configLocation, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates CacheManager supplied by Redisson instance, Codec instance
|
||||
* and Config location path.
|
||||
* <p>
|
||||
* Each Cache instance share one Codec instance.
|
||||
* <p>
|
||||
* Loads the config file from the class path, interpreting plain paths as class path resource names
|
||||
* that include the package path (e.g. "mypackage/myresource.txt").
|
||||
*
|
||||
* @param redisson object
|
||||
* @param configLocation path
|
||||
* @param codec object
|
||||
*/
|
||||
public RedissonSpringCacheNativeManager(RedissonClient redisson, String configLocation, Codec codec) {
|
||||
super(redisson, configLocation, codec);
|
||||
}
|
||||
|
||||
private void validateProps() {
|
||||
for (CacheConfig value : configMap.values()) {
|
||||
if (value.getMaxIdleTime() > 0) {
|
||||
throw new UnsupportedOperationException("maxIdleTime isn't supported");
|
||||
}
|
||||
if (value.getMaxSize() > 0) {
|
||||
throw new UnsupportedOperationException("maxSize isn't supported");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfig(Map<String, ? extends CacheConfig> config) {
|
||||
super.setConfig(config);
|
||||
validateProps();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RMap<Object, Object> getMap(String name, CacheConfig config) {
|
||||
if (codec != null) {
|
||||
return redisson.getMapCacheNative(name, codec);
|
||||
}
|
||||
return redisson.getMapCacheNative(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RMapCache<Object, Object> getMapCache(String name, CacheConfig config) {
|
||||
RMapCacheNative<Object, Object> map = (RMapCacheNative<Object, Object>) getMap(name, config);
|
||||
return new MapCacheNativeWrapper<>(map, (Redisson) redisson);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
super.afterPropertiesSet();
|
||||
if (configLocation != null) {
|
||||
validateProps();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue