2014-06-16 54 views
5

我嘗試下面這個教程: http://javakart.blogspot.in/2012/12/spring-data-redis-hello-world-example.html春數據RedisTemplate:序列化的價值和散列值

我的問題是與此相關的: Weird redis key with spring data Jedis

我能夠解決的按鍵,並使用StringRedisSerializer HASHKEYS。

<bean 
id="stringRedisSerializer" 
class="org.springframework.data.redis.serializer.StringRedisSerializer"/> 

<bean 
id="redisTemplate" 
class="org.springframework.data.redis.core.RedisTemplate" 
p:connection-factory-ref="jedisConnectionFactory" 
p:keySerializer-ref="stringRedisSerializer" 
p:hashKeySerializer-ref="stringRedisSerializer" 
/> 

但是,我發現它使用序列化程序的值和哈希值問題。

我嘗試添加此:

p:valueSerializer-ref="stringRedisSerializer" 
p:hashValueSerializer-ref="stringRedisSerializer" 

但是一個錯誤提示: 「用戶不能轉換爲java.lang.String」

任何人都可以分享如何利用串行的價值/散列值?

+0

這看起來像你是串行化用戶對象作爲字符串對象。相反,你可以通過編寫「class User implements java.io.Serializable」將User對象標記爲Serializable,那麼java默認serializer會自動處理。所以最好不要在你的beans.xml中配置任何與「Serializer-ref =」相關的東西 –

+0

http://stackoverflow.com/questions/13215024/weird-redis-key-with-spring-data-jedis –

回答

9

Redis將鍵和值存儲爲字符串。由持久層來處理解析。在這個例子中,User是POJO而不是String。我建議你使用JacksonJsonRedisSerializer而不是StringRedisSerializer。這樣你就可以將json存儲爲你的價值。

<bean id="userJsonRedisSerializer" 
    class="org.springframework.data.redis.serializer.JacksonJsonRedisSerializer"> 
    <constructor-arg type="java.lang.Class" value="com.mycompany.redis.domain.User"/> 
</bean>