From 6b6f67cbdbab2246cdd2213525022b01bad4594c Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 28 Dec 2015 16:09:31 +0300 Subject: [PATCH] Redisson.saveBuckets added. #336 --- src/main/java/org/redisson/Redisson.java | 21 +++++++++++++++++++ .../java/org/redisson/RedissonClient.java | 11 ++++++++-- .../client/protocol/RedisCommands.java | 1 + .../java/org/redisson/RedissonBucketTest.java | 15 +++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/redisson/Redisson.java b/src/main/java/org/redisson/Redisson.java index cc547cac7..5854c91ea 100755 --- a/src/main/java/org/redisson/Redisson.java +++ b/src/main/java/org/redisson/Redisson.java @@ -15,11 +15,13 @@ */ package org.redisson; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.UUID; import org.redisson.api.RedissonReactiveClient; @@ -195,6 +197,25 @@ public class Redisson implements RedissonClient { return result; } + public void saveBuckets(Map buckets) { + if (config.isClusterConfig()) { + throw new IllegalStateException("This method can't be used in cluster mode!"); + } + + List params = new ArrayList(buckets.size()); + for (Entry entry : buckets.entrySet()) { + params.add(entry.getKey()); + try { + params.add(config.getCodec().getValueEncoder().encode(entry.getValue())); + } catch (IOException e) { + throw new IllegalArgumentException(e); + } + } + + Future future = commandExecutor.writeAsync(null, RedisCommands.MSET, params.toArray()); + commandExecutor.get(future); + } + @Override public List> getBuckets(String pattern) { return findBuckets(pattern); diff --git a/src/main/java/org/redisson/RedissonClient.java b/src/main/java/org/redisson/RedissonClient.java index b133b2885..aa16b5dd0 100755 --- a/src/main/java/org/redisson/RedissonClient.java +++ b/src/main/java/org/redisson/RedissonClient.java @@ -143,7 +143,7 @@ public interface RedissonClient { List> findBuckets(String pattern); /** - *

Returns RBucket value mapped by key. Result Map is not contains + *

Returns Redis object mapped by key. Result Map is not contains * key-value entry for null values. * *

Uses MGET Redis command. @@ -154,7 +154,7 @@ public interface RedissonClient { Map loadBucketValues(Collection keys); /** - *

Returns RBucket value mapped by key. Result Map is not contains + *

Returns Redis object mapped by key. Result Map is not contains * key-value entry for null values. * *

Uses MGET Redis command. @@ -164,6 +164,13 @@ public interface RedissonClient { */ Map loadBucketValues(String ... keys); + /** + * Saves Redis object mapped by key. + * + * @param buckets + */ + void saveBuckets(Map buckets); + /** * Use {@link #findBuckets(String)} */ diff --git a/src/main/java/org/redisson/client/protocol/RedisCommands.java b/src/main/java/org/redisson/client/protocol/RedisCommands.java index 6af6afc73..0ce054300 100644 --- a/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -171,6 +171,7 @@ public interface RedisCommands { RedisStrictCommand> KEYS = new RedisStrictCommand>("KEYS", new StringListReplayDecoder()); RedisCommand> MGET = new RedisCommand>("MGET", new ObjectListReplayDecoder()); + RedisStrictCommand MSET = new RedisStrictCommand("MSET", new VoidReplayConvertor()); RedisCommand HSET = new RedisCommand("HSET", new BooleanReplayConvertor(), 2, ValueType.MAP); RedisStrictCommand HINCRBYFLOAT = new RedisStrictCommand("HINCRBYFLOAT"); diff --git a/src/test/java/org/redisson/RedissonBucketTest.java b/src/test/java/org/redisson/RedissonBucketTest.java index b01c8abce..770053a86 100755 --- a/src/test/java/org/redisson/RedissonBucketTest.java +++ b/src/test/java/org/redisson/RedissonBucketTest.java @@ -10,9 +10,24 @@ import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; import org.redisson.core.RBucket; +import static org.assertj.core.api.Assertions.*; public class RedissonBucketTest extends BaseTest { + @Test + public void testSaveBuckets() { + Map buckets = new HashMap(); + buckets.put("12", 1); + buckets.put("41", 2); + redisson.saveBuckets(buckets); + + RBucket r1 = redisson.getBucket("12"); + assertThat(r1.get()).isEqualTo(1); + + RBucket r2 = redisson.getBucket("41"); + assertThat(r2.get()).isEqualTo(2); + } + @Test public void testLoadBucketValues() { RBucket bucket1 = redisson.getBucket("test1");