-
Notifications
You must be signed in to change notification settings - Fork 3
Complex Fields
Wiehann Matthysen edited this page Apr 15, 2012
·
3 revisions
Strawberry supports the following complex field-types:
- List
- Map
- Set
- Ordered Set
To illustrate this functionality, we are going to populate our Redis database with a couple of values:
redis 127.0.0.1:6379> rpush test:list "value 01"
(integer) 1
redis 127.0.0.1:6379> rpush test:list "value 02"
(integer) 2
redis 127.0.0.1:6379> rpush test:list "value 03"
(integer) 3
redis 127.0.0.1:6379> hmset test:map "key 01" "value 01" "key 02" "value 02" "key 03" "value 03"
OK
redis 127.0.0.1:6379> sadd test:set "value 01"
(integer) 1
redis 127.0.0.1:6379> sadd test:set "value 02"
(integer) 1
redis 127.0.0.1:6379> sadd test:set "value 03"
(integer) 1
redis 127.0.0.1:6379> zadd test:zset 1 "value 03"
(integer) 1
redis 127.0.0.1:6379> zadd test:zset 2 "value 02"
(integer) 1
redis 127.0.0.1:6379> zadd test:zset 3 "value 01"
(integer) 1
redis 127.0.0.1:6379> exit
Now, assuming we have a class called ConfigStore to serve as container for all of these values:
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.github.strawberry.guice.Redis;
public class ConfigStore {
@Redis("test:list")
private List<String> testList;
@Redis("test:map")
private Map<String, String> testMap;
@Redis("test:set")
private Set<String> testSet;
@Redis("test:zset")
private Set<String> testOrderedSet;
public List<String> getList() {
return this.testList;
}
public Map<String, String> getMap() {
return this.testMap;
}
public Set<String> getSet() {
return this.testSet;
}
public Set<String> getOrderedSet() {
return this.testOrderedSet;
}
}
Then, the following unit-test should pass:
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import com.github.strawberry.guice.RedisModule;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.inject.Guice;
import com.google.inject.Injector;
import redis.clients.jedis.JedisPool;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;
public class TestConfigStore {
private final JedisPool pool = new JedisPool("localhost", 6379);
@Test
public void testConfigStoreValues() {
Injector injector = Guice.createInjector(new RedisModule(this.pool));
ConfigStore store = injector.getInstance(ConfigStore.class);
List<String> expectedList = Lists.newArrayList("value 01", "value 02", "value 03");
assertThat(store.getList(), is(equalTo(expectedList)));
Map<String, String> expectedMap = ImmutableMap.of(
"key 01", "value 01",
"key 02", "value 02",
"key 03", "value 03"
);
assertThat(store.getMap(), is(equalTo(expectedMap)));
Set<String> expectedSet = Sets.newHashSet("value 01", "value 02", "value 03");
assertThat(store.getSet(), is(equalTo(expectedSet)));
Set<String> expectedOrderedSet = Sets.newLinkedHashSet(
Lists.newArrayList("value 03", "value 02", "value 01")
);
assertThat(store.getOrderedSet(), is(equalTo(expectedOrderedSet)));
}
}