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

Java 如何使用RedisTemplate访问SpringRedis会话存储的散列密钥?,java,spring,session,redis,Java,Spring,Session,Redis,我有这个问题 redis中存储了一个spring会话,已保存 据我所知,这是一个散列集 我可以通过redis cli访问它,据我所知,这是为了获取散列键的值 效果很好 现在在spring上,我想通过Redis模板(org.springframework.data.Redis.core)访问它 所以,我做了这个 @自动连线 RedisOperationsSessionRepository RedisOperationsSessionRepository @自动连线 再发现模板再发现模板 并且试着

我有这个问题

redis中存储了一个spring会话,已保存

据我所知,这是一个散列集

我可以通过redis cli访问它,据我所知,这是为了获取散列键的值

效果很好

现在在spring上,我想通过Redis模板(org.springframework.data.Redis.core)访问它

所以,我做了这个

@自动连线 RedisOperationsSessionRepository RedisOperationsSessionRepository

@自动连线 再发现模板再发现模板

并且试着

stringRedisTemplate.opsForValue().get(loggedSessionId)

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

谢谢

编辑:

我基本上想做的是

复制这个

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

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

引用自

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

所以

将返回存储在密钥mykey中的字段myKeyHash的值

例如,您的文件将是creationTime、maxInactiveInterval、lastAccessedTime和attributes

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

redisTemplate.opsForHash().entries("mykey")
返回该散列中包含的所有文件及其值的映射

编辑

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

RedisTemplate<String, Object> template = new RedisTemplate<>(); 
RedisSerializer stringSerializer = new StringRedisSerializer();
template.setConnectionFactory(...); 
template.setKeySerializer(stringSerializer); 
template.setHashKeySerializer(stringSerializer);
RedisTemplate=new RedisTemplate();
RedisSerializer stringSerializer=新的StringRedisSerializer();
模板.setConnectionFactory(…);
setKeySerializer(stringSerializer);
setHashKeySerializer(stringSerializer);

在创建我的redis模板时,是否必须指定任何转换器?以及。。。“sessionAttr:SPRING\u SECURITY\u CONTEXT”中的值是什么类型的对象?谢谢@chimmi,你知道有没有更简单的方法来获取当前记录的用户主体以及保存在redis中的数据?@jpganz18如果你想要当前用户,为什么要使用redis?为什么你不能直接从SecurityContextHolder或http会话中提取它?因为我在会话筛选器运行之前通过筛选器运行它,所以当我运行筛选器时,请求信息中没有用户主体的信息
redisTemplate.opsForHash().get("mykey", "myKeyHash")
redisTemplate.opsForHash().entries("mykey")
RedisTemplate<String, Object> template = new RedisTemplate<>(); 
RedisSerializer stringSerializer = new StringRedisSerializer();
template.setConnectionFactory(...); 
template.setKeySerializer(stringSerializer); 
template.setHashKeySerializer(stringSerializer);