gpt4 book ai didi

java - Redis - 过期索引不会被删除

转载 作者:行者123 更新时间:2023-12-02 02:21:58 29 4
gpt4 key购买 nike

我发现以下问题 ( Spring Redis - Indexes not deleted after main entry expires ) 关于 Redis 中索引过期的问题。

问题在于 main 和 :phantom 条目过期并被正确删除,但相应的 :idx 条目在 Redis 中仍处于孤立状态。

建议的解决方案之一是启用 KeyspaceEvents,以便 Redis 在清理作业期间自动删除过期条目的索引。

不幸的是,这个解决方案不适用于我们的 Spring Boot 应用程序,因为我们使用 Redis Enterprise 作为云环境中提供的服务,这不允许我们进行任何配置更改(CONFIG 命令已禁用)。

这是我尝试过的:

@Configuration
@EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP)
public class RedisConfiguration {...}

编辑:
我以为这适用于我本地的 Redis docker 镜像,但我错了!在我们提供的 Redis(企业)服务上,甚至无法使用以下消息进行设置:
由以下原因引起:redis.clients.jedis.exceptions.JedisDataException:错误未知命令“CONFIG”...

有人可以给我一个关于如何删除索引的提示吗?

我们目前没有很多 :idx 条目,但它们必须/应该与 :phantom 条目一起删除,以避免保留任何“孤立”条目。

提前致谢。

最佳答案

我可以找到删除键 :phantom:idx 的解决方案。

在Redis配置类中,应放置以下内容:

@Configuration
@EnableRedisRepositories(enableKeyspaceEvents = EnableKeyspaceEvents.ON_STARTUP, basePackages = {
"com.aaaaa.bbbbb.persistence.model.repository" }, keyspaceNotificationsConfigParameter = "")

当您将“keyspaceNotificationsConfigParameter”属性设置为空字符串时,不会执行在 AWS Redis 中不起作用的 CONFIG 命令,但通过这种方式,会实例化过期事件监听器。

该属性带有一个默认值(Ex),该值会导致执行 CONFIG 命令。

这通过以下 spring 代码发生:

public void init() {
if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {
RedisConnection connection = listenerContainer.getConnectionFactory().getConnection();

try {
Properties config = connection.getConfig("notify-keyspace-events");

if (!StringUtils.hasText(config.getProperty("notify-keyspace-events"))) {
connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter);
}

} finally {
connection.close();
}
}
doRegister(listenerContainer);
}

如何不满足此条件

if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {

CONFIG命令未执行。

我认为 Spring 应该改进这一点,而不是基于使用空字符串设置属性来实现这一点。

唯一还需要的是,在AWS ElastiCache(Redis)中为“notify-keyspace-events”参数设置一个值,例如AKE,这意味着所有事件都会被通知。

关于java - Redis - 过期索引不会被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48379229/

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