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

标签 spring spring-mvc redis

我是 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/

相关文章:

c# - Redis不会从数据库中检索所有数据

java - 无法识别 Hibernate 符号 @id @column

java - 捕获 Spring Integration DSL 错误配置异常?

java - Spring MVC,如何经常轮询服务器的最佳实践

java - 如何从包中制作JAR?

validation - 使用 Spring @Valid 注解验证部分 Modal

php - 多线程实现模式

java - 客户端发送的请求在语法上使用@DateTimeFormat 是不正确的

java - 当 ResponseBody 有集合时,MockMvc post junit 测试返回 415

docker - 如何使用Docker Compose将本地Redis连接到Docker容器