From 9ecad07587aedfb5597f964bed8b662fb1852aa3 Mon Sep 17 00:00:00 2001 From: David Liu Date: Thu, 21 Aug 2014 07:19:25 +0800 Subject: [PATCH] DATAREDIS-197 - Expose bit-related ops via ValueOperations. Polishing. Added -S switch to gradlew in makefile for better Stacktrace reporting. Original pull request: #96. --- Makefile | 2 +- .../redis/core/DefaultValueOperations.java | 25 ++++++++++++++++ .../data/redis/core/ValueOperations.java | 18 +++++++++++ .../core/DefaultValueOperationsTests.java | 30 ++++++++++++++++--- 4 files changed, 70 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 217fd7bb0..34e7f4c02 100644 --- a/Makefile +++ b/Makefile @@ -95,5 +95,5 @@ stop: redis-stop sentinel-stop test: $(MAKE) start sleep 2 - $(PWD)/gradlew clean build -DrunLongTests=true + $(PWD)/gradlew clean build -DrunLongTests=true -S $(MAKE) stop diff --git a/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java b/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java index 6d3952c22..1e4fa7db4 100644 --- a/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java +++ b/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java @@ -244,4 +244,29 @@ class DefaultValueOperations extends AbstractOperations implements V } }, true); } + + @Override + public Boolean setBit(K key, final long offset, final boolean value) { + + final byte[] rawKey = rawKey(key); + return execute(new RedisCallback() { + + public Boolean doInRedis(RedisConnection connection) { + return connection.setBit(rawKey, offset, value); + } + }, true); + } + + @Override + public Boolean getBit(K key, final long offset) { + + final byte[] rawKey = rawKey(key); + return execute(new RedisCallback() { + + public Boolean doInRedis(RedisConnection connection) { + return connection.getBit(rawKey, offset); + } + }, true); + } + } diff --git a/src/main/java/org/springframework/data/redis/core/ValueOperations.java b/src/main/java/org/springframework/data/redis/core/ValueOperations.java index 41570ecef..47ddf7cdd 100644 --- a/src/main/java/org/springframework/data/redis/core/ValueOperations.java +++ b/src/main/java/org/springframework/data/redis/core/ValueOperations.java @@ -66,4 +66,22 @@ public interface ValueOperations { Long size(K key); RedisOperations getOperations(); + + /** + * @since 1.5 + * @param key + * @param offset + * @param value + * @return + */ + Boolean setBit(K key, long offset, boolean value); + + /** + * @since 1.5 + * @param key + * @param offset + * @return + */ + Boolean getBit(K key, long offset); + } diff --git a/src/test/java/org/springframework/data/redis/core/DefaultValueOperationsTests.java b/src/test/java/org/springframework/data/redis/core/DefaultValueOperationsTests.java index d0dc5a530..468ea1284 100644 --- a/src/test/java/org/springframework/data/redis/core/DefaultValueOperationsTests.java +++ b/src/test/java/org/springframework/data/redis/core/DefaultValueOperationsTests.java @@ -15,10 +15,14 @@ */ package org.springframework.data.redis.core; -import static org.junit.Assert.*; -import static org.junit.Assume.*; -import static org.springframework.data.redis.SpinBarrier.*; -import static org.springframework.data.redis.matcher.RedisTestMatchers.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; +import static org.springframework.data.redis.SpinBarrier.waitFor; +import static org.springframework.data.redis.matcher.RedisTestMatchers.isEqual; import java.text.DecimalFormat; import java.util.ArrayList; @@ -45,6 +49,8 @@ import org.springframework.data.redis.connection.RedisConnection; * * @author Jennifer Hickey * @author Christoph Strobl + * @author David Liu + * @author Thomas Darimont */ @RunWith(Parameterized.class) public class DefaultValueOperationsTests { @@ -274,4 +280,20 @@ public class DefaultValueOperationsTests { assumeTrue(key1 instanceof byte[]); assertNotNull(((DefaultValueOperations) valueOps).deserializeKey((byte[]) key1)); } + + /** + * @see DATAREDIS-197 + */ + @Test + public void testSetAndGetBit() { + + assumeTrue(redisTemplate instanceof StringRedisTemplate); + + K key1 = keyFactory.instance(); + int bitOffset = 65; + valueOps.setBit(key1, bitOffset, true); + + assertEquals(true, valueOps.getBit(key1, bitOffset)); + } + }