gpt4 book ai didi

Spring RedisTemplate : use same key with multiple RedisTemplate to store different values

转载 作者:IT王子 更新时间:2023-10-29 05:58:32 27 4
gpt4 key购买 nike

我是 Redis 的新手,想用我现有的 spring 应用程序来实现它。

我的问题是使用具有相同键的不同 redisTemplate 来存储不同类型的值。

例如

我在 spring 中定义了 redisTemplate1 和 redisTemplate2 bean,比如。

<bean id="redisTemplate1" class ="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref ="connectionFactory" />

<bean id="redisTemplate2" class ="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref ="connectionFactory" />

在我的服务的 java 文件中,我使用这两个 redis 模板创建了两个不同的数据结构。

@Autowired
@Qualifier(value = "redisTemplate1")
private RedisTemplate<String, Student> redisTemplate1;

@Autowired
@Qualifier(value = "redisTemplate2")
private RedisTemplate<String, Address> redisTemplate2;

并且,使用以下模式来存储数据。

redisTemplate1.opsForHash().put("KEY1", student.getId(), student);
redisTemplate2.opsForHash().put("KEY1", address.getId(), address);

情况是,我的每个表都有以 1 开头的主键。所以 1 是否有 Student 和 Address 的主键。

我正在使用下面的行从数据存储中获取 Student。

(Student) redisTemplate1.opsForHash().get("KEY1", 1);

但是,不幸的是它产生了一个异常。

java.lang.ClassCastException: com.redis.model.Address cannot be cast to com.redis.model.Student

所以,我的问题是,

  • 是否可以使用多个 redis 模板?
  • 如果是,我可以使用相同的 key (对于每个模板都是唯一的)来存储不同类型的数据并访问使用该模板和 key 存储的相同数据吗?
  • 如果不能,执行相同操作的替代方案是什么?

提前致谢。

最佳答案

实际上,Redis 是一个key/value 存储,如果您对同一个存储使用相同的key,您只需用新值覆盖旧值。如果真正的 Redis 服务器是相同的,那么您拥有多少 RedisTemplate(甚至 connectionFactory)并不重要。

现在如何帮助您完成任务:

对于不同的域对象,你应该有不同的kyes:例如学生地址。由于您要使用自己的键存储域对象,因此 Map value 看起来适合您。我的意思是在键 students 下应该存储 Student 的映射,对于 Address 也是如此。

实际上,无论您如何操作,但是您对两个域使用相同的 key。因此,答案是:那是因为您使用的是来自两个 RedisTemplate 的相同 Redis。

关于 Spring RedisTemplate : use same key with multiple RedisTemplate to store different values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com