Skip to content
Wiehann Matthysen edited this page Apr 15, 2012 · 3 revisions

Complex Fields

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)));
    }
}
Clone this wiki locally