如何只使用一个键值将对象列表保存到Redis中?

时间:2015-12-14 23:25:07

标签: java spring redis

我正在尝试这样做。

我有一个对象列表(自定义对象),我想将它们全部保存在Redis的单个寄存器中,是否有可能以某种方式将它们保存为ajax?我正在读杰克逊,但我无法弄清楚如何。

到目前为止我只有这个

@Autowired
private StringRedisTemplate redisTmpl;

我可以像这样保存

redisTmpl.opsForValue().set("foo", "bar");

工作得很好,但我想保存我的对象列表(使用此StringRedisTemplate而不是Bar。

知道该怎么做吗?

或者也许用另一种方式?但我需要只用一个密钥保存所有列表。

由于

5 个答案:

答案 0 :(得分:2)

我找到了办法......

要保存所有列表,您可以通过这种方式使用jackson

ObjectMapper mapper = new ObjectMapper();
String jsonInString = mapper.writeValueAsString(myList);

后来你只是以同样的方式保存它

redisTmpl.opsForValue().set("foo", jsonInString);

答案 1 :(得分:0)

如果您可以将对象序列化为JSON,则可以将其作为字符串存储在redis中。但为此您可能需要为您的类创建序列化/反序列化方法。

答案 2 :(得分:0)

你应该使用spring支持将你的值转换为JSON,如下例所示。它还会将您的密钥直接转换为字符串。

<bean id="serializer" class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
    <constructor-arg>
        <value type="java.lang.Class">your.class.path.to.be.saved.in.redis</value>
    </constructor-arg>
</bean>

<bean id="template" class="org.springframework.data.redis.core.RedisTemplate"
        p:connection-factory-ref="redisConnectionFactory">
    <property name="valueSerializer" ref="serializer"/>
    <property name="keySerializer">
        <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
    </property>
   </bean>

答案 3 :(得分:0)

您也可以尝试Redisson。它支持许多编解码器,如Jackson JSONAvroSmileCBORMsgPackKryoFST,{{1 },LZ4Snappy。它非常容易使用:

JDK Serialization

答案 4 :(得分:0)

使用redisson,您可以这样做:

ObjectMapper mapper = new ObjectMapper();
RList<MyObject> list = redissonCLient.getList("myKey");
list.add(mapper.writeValueAsString(new MyObject("test")));

上面的代码将使用MyObjects值以JSON格式保存Redis列表。

要检索列表,您可以执行以下操作:

RList<MyObject> list = redissonCLient.getList("myKey");
List<MyObject> myObjects = mapper.readValue(list.toString(), new TypeReference<List<MyObject>>(){});