我有这个问题。
在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 是如何得到它的......
谢谢。
编辑:
我基本上想做的是
复制这个
并使用另一个模板将其保存在其他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 的值。
对于您的考试,您的文件将是 creationTime、maxInactiveInterval、lastAccessedTime 和属性。
顺便说一句,还有一个更方便的方法:
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/