java - 如何使用 RedisTemplate 访问由 spring redis session 存储的散列 key ?

标签 java spring session redis

我有这个问题。

在redis中存储了一个spring session,saved this way

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

据我了解是散列集。

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

效果很好。

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

所以,我这样做了

@自动连线 RedisOperationsSessionRepository redisOperationsSessionRepository;

@自动连线 RedisTemplate redisTemplate;

并尝试...

stringRedisTemplate.opsForValue().get(loggedSessionId);

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

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

谢谢。

编辑:

我基本上想做的是

复制这个

enter image description here

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

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

最佳答案

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

Redis Hashes are maps between string fields and string values ...

所以

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

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

对于您的考试,您的文件将是 creationTimemaxInactiveIntervallastAccessedTime 和属性。

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

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

返回该散列中包含的所有文件及其值的映射。

编辑

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

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

关于java - 如何使用 RedisTemplate 访问由 spring redis session 存储的散列 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247377/

相关文章:

java - Android : OpenGL, TextView

java - 在maven eclipse项目中找不到spring框架的标签库描述符

javascript - 如何正确使用 Passport.js?

java - Spring 没有在响应中设置 statusText

java - 为什么时区与 java 中的 main 方法和表单 Web 应用程序不同

java - Spring Hibernate 中动态选择数据源 - 方法

php - 使用 session 时在 xampp 上可能导致 ERR_CONNECTION_RESET 错误的原因

javascript - 雅虎财经、Meteor 和 session

java - 类加载器问题

java - 通过Interceptor或HttpEntity向RestTemplate添加http header ?