Skip to content
This repository was archived by the owner on Nov 21, 2020. It is now read-only.

Commit 5dadc87

Browse files
committed
feat: add some utility methods for spring cache
1 parent de53b14 commit 5dadc87

File tree

3 files changed

+83
-19
lines changed

3 files changed

+83
-19
lines changed

src/main/java/org/code4everything/boot/cache/AbstractCache.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package org.code4everything.boot.cache;
22

33
import org.code4everything.boot.config.BootConfig;
4-
import org.code4everything.boot.web.mvc.exception.ExceptionFactory;
54
import org.springframework.cache.Cache;
65
import org.springframework.cache.support.SimpleValueWrapper;
7-
import org.springframework.http.HttpStatus;
86

97
import java.util.Objects;
108
import java.util.concurrent.Callable;
@@ -59,7 +57,7 @@ protected <T> T convert2(Object value, Callable<T> valueLoader) {
5957
return valueLoader.call();
6058
} catch (Exception e) {
6159
if (BootConfig.isDebug()) {
62-
throw ExceptionFactory.exception(HttpStatus.INTERNAL_SERVER_ERROR, "value loader error");
60+
throw new RuntimeException("value loader error");
6361
}
6462
return null;
6563
}

src/main/java/org/code4everything/boot/cache/BootCacheManager.java

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package org.code4everything.boot.cache;
22

3+
import cn.hutool.core.collection.ConcurrentHashSet;
34
import cn.hutool.core.util.ObjectUtil;
45
import org.springframework.cache.Cache;
56
import org.springframework.cache.CacheManager;
67

7-
import java.util.*;
8+
import java.util.Collection;
9+
import java.util.Map;
10+
import java.util.Objects;
11+
import java.util.Set;
812
import java.util.concurrent.ConcurrentHashMap;
913

1014
/**
@@ -32,7 +36,7 @@ public BootCacheManager(CacheCreator cacheCreator, int capacity) {
3236
this.dynamic = true;
3337
this.cacheCreator = cacheCreator;
3438
cacheMap = new ConcurrentHashMap<>(capacity);
35-
cacheNames = new HashSet<>(capacity);
39+
cacheNames = new ConcurrentHashSet<>(capacity);
3640
}
3741

3842
public BootCacheManager(Collection<Cache> caches, CacheCreator cacheCreator) {
@@ -41,7 +45,7 @@ public BootCacheManager(Collection<Cache> caches, CacheCreator cacheCreator) {
4145
this.cacheCreator = cacheCreator;
4246
int capacity = caches.size() * 4 / 3 + 1;
4347
cacheMap = new ConcurrentHashMap<>(capacity);
44-
cacheNames = new HashSet<>(capacity);
48+
cacheNames = new ConcurrentHashSet<>(capacity);
4549
caches.forEach(cache -> {
4650
cacheMap.put(cache.getName(), cache);
4751
cacheNames.add(cache.getName());
@@ -71,4 +75,40 @@ public Cache getCache(String name) {
7175
public Collection<String> getCacheNames() {
7276
return cacheNames;
7377
}
78+
79+
public Cache requireCache(String cacheName) {
80+
Cache cache = getCache(cacheName);
81+
Objects.requireNonNull(cache, "cache '" + cacheName + "' has no config");
82+
return cache;
83+
}
84+
85+
public void putVal(String cacheName, String key, Object value) {
86+
Cache cache = getCache(cacheName);
87+
if (ObjectUtil.isNotNull(cache)) {
88+
cache.put(key, value);
89+
}
90+
}
91+
92+
public void delVal(String cacheName, String key) {
93+
Cache cache = getCache(cacheName);
94+
if (ObjectUtil.isNotNull(cache)) {
95+
cache.evict(key);
96+
}
97+
}
98+
99+
public void removeAll(String cacheName) {
100+
Cache cache = getCache(cacheName);
101+
if (ObjectUtil.isNotNull(cache)) {
102+
cache.clear();
103+
}
104+
}
105+
106+
public Object getVal(String cacheName, String key) {
107+
Cache cache = getCache(cacheName);
108+
if (ObjectUtil.isNotNull(cache)) {
109+
Cache.ValueWrapper wrapper = cache.get(key);
110+
return Objects.isNull(wrapper) ? null : wrapper.get();
111+
}
112+
return null;
113+
}
74114
}

src/main/java/org/code4everything/boot/cache/CacheUtils.java

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import com.google.common.cache.CacheBuilder;
55
import org.code4everything.boot.cache.guava.GuavaCache;
66
import org.code4everything.boot.cache.guava.GuavaCacheManager;
7+
import org.code4everything.boot.cache.redis.RedisCache;
8+
import org.code4everything.boot.cache.redis.RedisCacheCreator;
9+
import org.code4everything.boot.cache.redis.RedisCacheManager;
710
import org.springframework.cache.Cache;
811

912
import java.util.ArrayList;
@@ -21,16 +24,43 @@ public class CacheUtils {
2124

2225
private CacheUtils() {}
2326

27+
28+
// -------------------------------------------Redis-----------------------------------------------------------------
29+
30+
public static RedisCacheManager newRedisCacheManager(Map<String, RedisCacheCreator> redisCacheCreatorMap) {
31+
return newRedisCacheManager(redisCacheCreatorMap, null);
32+
}
33+
34+
public static RedisCacheManager newRedisCacheManager(Map<String, RedisCacheCreator> redisCacheCreatorMap,
35+
RedisCacheCreator defaultRedisCacheCreator) {
36+
Collection<RedisCache> caches = new ArrayList<>();
37+
redisCacheCreatorMap.forEach((k, v) -> caches.add(v.createCache(k)));
38+
return new RedisCacheManager(caches, defaultRedisCacheCreator);
39+
}
40+
41+
public static RedisCacheManager newRedisCacheManager(RedisCacheCreator redisCacheCreator, String... names) {
42+
return newRedisCacheManager(redisCacheCreator, Arrays.asList(names));
43+
}
44+
45+
public static RedisCacheManager newRedisCacheManager(RedisCacheCreator redisCacheCreator,
46+
Collection<String> names) {
47+
if (CollUtil.isEmpty(names)) {
48+
return new RedisCacheManager(redisCacheCreator);
49+
}
50+
Collection<RedisCache> caches = new ArrayList<>(names.size());
51+
names.forEach(name -> caches.add(redisCacheCreator.createCache(name)));
52+
return new RedisCacheManager(caches, redisCacheCreator);
53+
}
54+
2455
// ---------------------------------------Guava---------------------------------------------------------------------
2556

2657
public static GuavaCacheManager newGuavaCacheManager(Map<String, CacheBuilder<Object, Object>> cacheBuilderMap) {
2758
return newGuavaCacheManager(cacheBuilderMap, null);
2859
}
2960

30-
3161
public static GuavaCacheManager newGuavaCacheManager(Map<String, CacheBuilder<Object, Object>> cacheBuilderMap,
3262
CacheBuilder<Object, Object> defaultCacheBuilder) {
33-
Collection<Cache> caches = new ArrayList<>();
63+
Collection<GuavaCache> caches = new ArrayList<>();
3464
cacheBuilderMap.forEach((k, v) -> caches.add(new GuavaCache(k, v.build())));
3565
return new GuavaCacheManager(caches, defaultCacheBuilder);
3666
}
@@ -44,24 +74,22 @@ public static GuavaCacheManager newGuavaCacheManager(CacheBuilder<Object, Object
4474
if (CollUtil.isEmpty(names)) {
4575
return new GuavaCacheManager(cacheBuilder);
4676
}
47-
Collection<Cache> caches = new ArrayList<>(names.size());
48-
for (String name : names) {
49-
caches.add(new GuavaCache(name, cacheBuilder.build()));
50-
}
77+
Collection<GuavaCache> caches = new ArrayList<>(names.size());
78+
names.forEach(name -> caches.add(new GuavaCache(name, cacheBuilder.build())));
5179
return new GuavaCacheManager(caches, cacheBuilder);
5280
}
5381

5482
// --------------------------------------------Custom---------------------------------------------------------------
5583

56-
public static GuavaCacheManager newCacheManager(Map<String, CacheCreator> cacheCreatorMap) {
84+
public static BootCacheManager newCacheManager(Map<String, CacheCreator> cacheCreatorMap) {
5785
return newCacheManager(cacheCreatorMap, null);
5886
}
5987

60-
public static GuavaCacheManager newCacheManager(Map<String, CacheCreator> cacheCreatorMap,
61-
CacheCreator defaultCacheCreator) {
88+
public static BootCacheManager newCacheManager(Map<String, CacheCreator> cacheCreatorMap,
89+
CacheCreator defaultCacheCreator) {
6290
Collection<Cache> caches = new ArrayList<>();
6391
cacheCreatorMap.forEach((k, v) -> caches.add(v.createCache(k)));
64-
return new GuavaCacheManager(caches, defaultCacheCreator);
92+
return new BootCacheManager(caches, defaultCacheCreator);
6593
}
6694

6795
public static BootCacheManager newCacheManager(CacheCreator cacheCreator, String... names) {
@@ -73,9 +101,7 @@ public static BootCacheManager newCacheManager(CacheCreator cacheCreator, Collec
73101
return new BootCacheManager(cacheCreator);
74102
}
75103
Collection<Cache> caches = new ArrayList<>(names.size());
76-
for (String name : names) {
77-
caches.add(cacheCreator.createCache(name));
78-
}
104+
names.forEach(name -> caches.add(cacheCreator.createCache(name)));
79105
return new BootCacheManager(caches, cacheCreator);
80106
}
81107
}

0 commit comments

Comments
 (0)