|
|
@@ -0,0 +1,96 @@
|
|
|
+package com.mrxu.framework.starter.redisson;
|
|
|
+
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+import org.redisson.api.RMapCache;
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
|
+public class RedisCache {
|
|
|
+
|
|
|
+ private int expiryInSeconds = 60*30;
|
|
|
+
|
|
|
+ private RedissonClient redisson ;
|
|
|
+
|
|
|
+ private RMapCache<Object, Object> getCache(final String region) {
|
|
|
+ return redisson.getMapCache(region);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public <T> T get(final String region, final Object key) {
|
|
|
+ T cacheItem = (T) getCache(region).get(key);
|
|
|
+ return cacheItem;
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public <T> T getAll(final String region) {
|
|
|
+ return (T) getCache(region).values();
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public <T> T getAllKeys(final String region) {
|
|
|
+ T cacheItem = (T) getCache(region).readAllKeySet();
|
|
|
+ return cacheItem;
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public <T> T getAllValues(final String region) {
|
|
|
+ T cacheItem = (T) getCache(region).readAllValues();
|
|
|
+ return cacheItem;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(final String region, final Object key, Object value) {
|
|
|
+ set(region, key, value, expiryInSeconds);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(final String region, final Object key, Object value, final long timeoutInSeconds) {
|
|
|
+ set(region, key, value, timeoutInSeconds, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set(final String region, final Object key, Object value, final long timeout, final TimeUnit unit) {
|
|
|
+ RMapCache<Object, Object> cache = redisson.getMapCache(region);
|
|
|
+ if (timeout > 0L) {
|
|
|
+ cache.fastPut(key, value, timeout, unit);
|
|
|
+ } else {
|
|
|
+ cache.fastPut(key, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object setIfAbsent(final String region, final Object key, Object value) {
|
|
|
+ return setIfAbsent(region, key, value, expiryInSeconds);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object setIfAbsent(final String region, final Object key, Object value, final long timeoutInSeconds) {
|
|
|
+ return setIfAbsent(region, key, value, timeoutInSeconds, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object setIfAbsent(final String region, final Object key, Object value, final long timeout, final TimeUnit unit) {
|
|
|
+ RMapCache<Object, Object> cache = redisson.getMapCache(region);
|
|
|
+ if (timeout > 0L) {
|
|
|
+ return cache.putIfAbsent(key, value, timeout, unit);
|
|
|
+ } else {
|
|
|
+ return cache.putIfAbsent(key, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void del(final String region, final Object key) {
|
|
|
+ getCache(region).fastRemove(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void mdel(final String region, final Collection<?> keys) {
|
|
|
+ getCache(region).fastRemove(keys.toArray(new Object[keys.size()]));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void deleteRegion(final String region) {
|
|
|
+ getCache(region).clear();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|