Skip to content

Commit d1881ba

Browse files
committed
[feature] add batch insert operations
1 parent 165b714 commit d1881ba

3 files changed

Lines changed: 122 additions & 4 deletions

File tree

tedisson-spring-boot-starter/src/main/java/com/tosan/client/redis/api/TedissonCacheManager.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ public interface TedissonCacheManager {
5353
*/
5454
void addItemToCache(String cacheName, String key, Object value);
5555

56+
/**
57+
* Batch Insert
58+
* @param cacheName Cache name
59+
* @param items Map of (item key,item value)
60+
*/
61+
void addItemsToCache(String cacheName, Map<String, Object> items);
62+
5663
/**
5764
* @param cacheName Cache name
5865
* @param key Item key
@@ -63,6 +70,16 @@ public interface TedissonCacheManager {
6370
*/
6471
void addItemToCache(String cacheName, String key, Object value, Long timeToLive, TimeUnit timeUnit);
6572

73+
/**
74+
* Batch Insert
75+
* @param cacheName Cache name
76+
* @param items Map of (item key,item value)
77+
* @param timeToLive Item time to live. Item expired when time to live is overed and removed listener raised when
78+
* next time item get from cache
79+
* @param timeUnit Time unit for time to live and time to idle
80+
*/
81+
void addItemsToCache(String cacheName, Map<String, Object> items, Long timeToLive, TimeUnit timeUnit);
82+
6683
/**
6784
* @param key Hash key
6885
* @param value Value
@@ -72,6 +89,15 @@ public interface TedissonCacheManager {
7289
*/
7390
void addItemToHash(String key, Object value, Long timeToLive, TimeUnit timeUnit);
7491

92+
/**
93+
* Batch Insert
94+
* @param items Map of (item key,item value)
95+
* @param timeToLive Item time to live. Item expired when time to live is overed and removed listener raised when
96+
* next time item get from cache
97+
* @param timeUnit Time unit for time to live and time to idle
98+
*/
99+
void addItemsToHash(Map<String, Object> items, Long timeToLive, TimeUnit timeUnit);
100+
75101
/**
76102
* @param key Hash key
77103
*/
@@ -110,6 +136,18 @@ public interface TedissonCacheManager {
110136
*/
111137
void addItemToCache(String cacheName, String key, Object value, Long timeToLive, Long timeToIdle, TimeUnit timeUnit);
112138

139+
/**
140+
* Batch Insert
141+
* @param cacheName Cache name
142+
* @param items Map of (item key,item value)
143+
* @param timeToLive Item time to live. Item expired when time to live is overed and removed listener raised when
144+
* next time item get from cache
145+
* @param timeToIdle Item time to idle. Item expired when time to idle is overed and removed listener raised when
146+
* next time item get from cache
147+
* @param timeUnit Time unit for time to live and time to idle
148+
*/
149+
void addItemsToCache(String cacheName, Map<String, Object> items, Long timeToLive, Long timeToIdle, TimeUnit timeUnit);
150+
113151
/**
114152
* @param cacheName Cache name
115153
* @param items The collection of items should be added to cache

tedisson-spring-boot-starter/src/main/java/com/tosan/client/redis/impl/TedissonLocalCacheManagerImpl.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,35 @@ public <T> T getItemFromHash(String key) {
5252
return localCacheManager.getItemFromCache(key, key);
5353
}
5454

55+
@Override
56+
public void addItemsToCache(String cacheName, Map<String, Object> items) {
57+
for (Map.Entry<String, Object> entry : items.entrySet()) {
58+
localCacheManager.addItemToCache(cacheName, entry.getKey(), entry.getValue());
59+
}
60+
}
61+
62+
@Override
63+
public void addItemsToCache(String cacheName, Map<String, Object> items, Long timeToLive, TimeUnit timeUnit) {
64+
for (Map.Entry<String, Object> entry : items.entrySet()) {
65+
localCacheManager.addItemToCache(cacheName, entry.getKey(), entry.getValue(), timeToLive, timeUnit);
66+
}
67+
}
68+
5569
@Override
5670
public void addItemToHash(String key, Object value, Long timeToLive, TimeUnit timeUnit) {
5771
localCacheManager.createCache(key);
5872
localCacheManager.addItemToCache(key, key, value, timeToLive, timeUnit);
5973
}
6074

75+
@Override
76+
public void addItemsToHash(Map<String, Object> items, Long timeToLive, TimeUnit timeUnit) {
77+
for (Map.Entry<String, Object> entry : items.entrySet()) {
78+
localCacheManager.createCache(entry.getKey());
79+
localCacheManager.addItemToCache(entry.getKey(), entry.getKey(), entry.getValue(), timeToLive, timeUnit);
80+
}
81+
}
82+
83+
6184
@Override
6285
public void removeItemFromHash(String key) {
6386
localCacheManager.removeItemFromCache(key, key);
@@ -83,6 +106,13 @@ public void addItemToCache(String cacheName, String key, Object value, Long time
83106
localCacheManager.addItemToCache(cacheName, key, value, timeToLive, timeToIdle, timeUnit);
84107
}
85108

109+
@Override
110+
public void addItemsToCache(String cacheName, Map<String, Object> items, Long timeToLive, Long timeToIdle, TimeUnit timeUnit) {
111+
for (Map.Entry<String, Object> entry : items.entrySet()) {
112+
localCacheManager.addItemToCache(cacheName, entry.getKey(), entry.getValue(), timeToLive, timeToIdle, timeUnit);
113+
}
114+
}
115+
86116
@Override
87117
public void addAllToCache(String cacheName, Map<String, Object> items) {
88118
localCacheManager.addAllToCache(cacheName, items);

tedisson-spring-boot-starter/src/main/java/com/tosan/client/redis/impl/redisson/TedissonCentralCacheManagerImpl.java

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@
2222
import lombok.extern.slf4j.Slf4j;
2323
import org.apache.commons.collections4.CollectionUtils;
2424
import org.apache.commons.collections4.MapUtils;
25-
import org.redisson.api.RAtomicLong;
26-
import org.redisson.api.RMap;
27-
import org.redisson.api.RMapCache;
28-
import org.redisson.api.RedissonClient;
25+
import org.redisson.api.*;
2926
import org.redisson.api.map.event.MapEntryListener;
3027
import org.redisson.spring.cache.RedissonSpringCacheManager;
3128
import org.springframework.cache.CacheManager;
@@ -149,6 +146,34 @@ public <T> T getItemFromHash(String key) {
149146
return null;
150147
}
151148

149+
@Override
150+
public void addItemsToCache(String cacheName, Map<String, Object> items) {
151+
RBatch batch = redisClient.createBatch();
152+
RMapCacheAsync<Object, Object> map = batch.getMapCache(cacheName);
153+
for (Map.Entry<String, Object> item : items.entrySet()) {
154+
map.fastPutAsync(item.getKey(), new CacheElement(item.getValue(), instanceID));
155+
}
156+
batch.execute();
157+
CentralCacheType centralCacheType = getCacheType(cacheName);
158+
if (centralCacheType == CentralCacheType.STREAM_SYNCED_LOCAL) {
159+
sendCacheClearMessage(cacheName);
160+
}
161+
}
162+
163+
@Override
164+
public void addItemsToCache(String cacheName, Map<String, Object> items, Long timeToLive, TimeUnit timeUnit) {
165+
RBatch batch = redisClient.createBatch();
166+
RMapCacheAsync<Object, Object> map = batch.getMapCache(cacheName);
167+
for (Map.Entry<String, Object> item : items.entrySet()) {
168+
map.fastPutAsync(item.getKey(), new CacheElement(item.getValue(), instanceID), timeToLive, timeUnit);
169+
}
170+
batch.execute();
171+
CentralCacheType centralCacheType = getCacheType(cacheName);
172+
if (centralCacheType == CentralCacheType.STREAM_SYNCED_LOCAL) {
173+
sendCacheClearMessage(cacheName);
174+
}
175+
}
176+
152177
public void addItemToCache(String cacheName, String key, Object value, Long timeToLive, Long timeToIdle, TimeUnit timeUnit) {
153178
CentralCacheType centralCacheType = getCacheType(cacheName);
154179
insertIntoCentralCache(cacheName, key, value, timeToLive, timeToIdle, timeUnit);
@@ -157,13 +182,38 @@ public void addItemToCache(String cacheName, String key, Object value, Long time
157182
}
158183
}
159184

185+
@Override
186+
public void addItemsToCache(String cacheName, Map<String, Object> items, Long timeToLive, Long timeToIdle, TimeUnit timeUnit) {
187+
RBatch batch = redisClient.createBatch();
188+
RMapCacheAsync<Object, Object> map = batch.getMapCache(cacheName);
189+
for (Map.Entry<String, Object> item : items.entrySet()) {
190+
map.fastPutAsync(item.getKey(), new CacheElement(item.getValue(), instanceID), timeToLive, timeUnit);
191+
}
192+
batch.execute();
193+
CentralCacheType centralCacheType = getCacheType(cacheName);
194+
if (centralCacheType == CentralCacheType.STREAM_SYNCED_LOCAL) {
195+
sendCacheClearMessage(cacheName);
196+
}
197+
}
198+
160199
@Override
161200
public void addItemToHash(String key, Object value, Long timeToLive, TimeUnit timeUnit) {
162201
RMap<String, CacheElement> map = redisClient.getMap(key);
163202
map.fastPut(key, new CacheElement(value, instanceID));
164203
map.expire(Duration.of(timeToLive, timeUnit.toChronoUnit()));
165204
}
166205

206+
@Override
207+
public void addItemsToHash(Map<String, Object> items, Long timeToLive, TimeUnit timeUnit) {
208+
RBatch batch = redisClient.createBatch();
209+
for (Map.Entry<String, Object> item : items.entrySet()) {
210+
RMapAsync<String, CacheElement> map = batch.getMap(item.getKey());
211+
map.fastPutAsync(item.getKey(), new CacheElement(item.getValue(), instanceID));
212+
map.expireAsync(Duration.of(timeToLive, timeUnit.toChronoUnit()));
213+
}
214+
batch.execute();
215+
}
216+
167217
@Override
168218
public void removeItemFromHash(String key) {
169219
RMap<String, CacheElement> map = redisClient.getMap(key);

0 commit comments

Comments
 (0)