如何使用RedisTemplate访问spring redis会话存储的散列密钥?

jpg*_*z18 3 java session spring redis

我有这个问题。

有存储在Redis的一个春季会议,保存这样

HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 \
    maxInactiveInterval 1800 \
    lastAccessedTime 1404360000000 \
    sessionAttr:attrName someAttrValue \
    sessionAttr2:attrName someAttrValue2
Run Code Online (Sandbox Code Playgroud)

据我了解是一个散列集。

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

效果很好。

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

所以,我做了这个

@Autowired RedisOperationsSessionRepository redisOperationsSessionRepository;

@Autowired RedisTemplate redisTemplate;

并尝试...

stringRedisTemplate.opsForValue().get(loggedSessionId);

redisTemplate.opsForHash().get("mykey", WHAT GOES HERE?)
redisOperationsSessionRepository.sessionRedisOperations.opsForHash().get(mykey", OR HERE?)
Run Code Online (Sandbox Code Playgroud)

到目前为止我无法访问它的信息,知道我必须定义什么哈希吗?没有信息春天是如何得到它的......

谢谢。

编辑:

我基本上想做的是

复制这个

在此处输入图片说明

并使用另一个模板将其保存在其他redis中...

如您所见,它没有以正确的方式序列化的值,如果我只是使用 opsForHash 复制和“粘贴”对象可能会出现问题,或者我会保存损坏的数据吗?

chi*_*mmi 5

引自https://redis.io/topics/data-types

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

所以

redisTemplate.opsForHash().get("mykey", "myKeyHash")
Run Code Online (Sandbox Code Playgroud)

将返回存储在键mykey中的字段myKeyHash 的值。

对于您的示例,您的文件将是creationTimemaxInactiveIntervallastAccessedTime和属性。

顺便说一下,还有一个更方便的方法:

redisTemplate.opsForHash().entries("mykey")
Run Code Online (Sandbox Code Playgroud)

返回包含在该哈希中的所有文件及其值的映射。

编辑

由于 Spring 对值使用JdkSerializationRedisSerializer,对键/哈希键使用StringRedisSerializer,因此您必须按如下方式配置 RedistTemplate 才能正确读取数据:

RedisTemplate<String, Object> template = new RedisTemplate<>(); 
RedisSerializer stringSerializer = new StringRedisSerializer();
template.setConnectionFactory(...); 
template.setKeySerializer(stringSerializer); 
template.setHashKeySerializer(stringSerializer);
Run Code Online (Sandbox Code Playgroud)