2017-07-21 34 views
0

我有这个问题。如何使用RedisTemplate访问由spring redis会话存储的散列键?

有存储在Redis的一个春季会议,保存this way

HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 \ 
    maxInactiveInterval 1800 \ 
    lastAccessedTime 1404360000000 \ 
    sessionAttr:attrName someAttrValue \ 
    sessionAttr2:attrName someAttrValue2 

据我理解是一个散列集。

我可以通过redis-cli与HMGET来访问它,据我所知是获取散列键的值。

工程很好。

现在在春天,我想通过Redis模板(org.springframework.data.redis.core)访问它。

所以,我这样做

@Autowired RedisOperationsSessionRepository redisOperationsSessionRepository;

@Autowired RedisTemplate redisTemplate;

,并试图...

stringRedisTemplate.opsForValue()得到(loggedSessionId)。

redisTemplate.opsForHash().get("mykey", WHAT GOES HERE?) 
redisOperationsSessionRepository.sessionRedisOperations.opsForHash().get(mykey", OR HERE?) 

到目前为止我无法访问它的信息,任何想法什么散列我必须定义?有没有信息如何春天得到它...

谢谢。

编辑:

我基本上想要做的就是

COPY这个

enter image description here

,并使用另一个模板保存在其他的Redis ...

你可以看到,它没有以正确的方式序列化的值,如果我使用opsForHash复制并“粘贴”对象,可能会出现问题或者我会保存损坏的数据?报价从现场的https://redis.io/topics/data-types

Redis的哈希是字符串字段和字符串值之间的映射......

所以

redisTemplate.opsForHash().get("mykey", "myKeyHash") 

将返回值

回答

2

存储myKeyHash钥匙mykey

为了您examle您的Fileds将创建时间maxInactiveIntervallastAccessedTime和属性。

顺便说还有一个更方便易方法:

redisTemplate.opsForHash().entries("mykey") 

返回包含在与他们的价值观散列所有的Fileds的地图。

编辑

由于Spring使用JdkSerializationRedisSerializer为valules和StringRedisSerializer钥匙/哈希键,您必须配置RedistTemplate如下,以便能够正确读取数据:

RedisTemplate<String, Object> template = new RedisTemplate<>(); 
RedisSerializer stringSerializer = new StringRedisSerializer(); 
template.setConnectionFactory(...); 
template.setKeySerializer(stringSerializer); 
template.setHashKeySerializer(stringSerializer); 
+0

有没有我创建我的redis模板时必须指定的转换器? – jpganz18

+0

和...“sessionAttr:SPRING_SECURITY_CONTEXT”的值是什么类型的对象? – jpganz18

+0

@ jpganz18请检查我的编辑上面。 – chimmi

相关问题