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

Java Redis-过期索引不会被删除,java,spring-boot,redis,spring-data-redis,Java,Spring Boot,Redis,Spring Data Redis,我发现了以下关于Redis中索引过期问题的问题() 问题是主条目和:phantom条目过期并被正确删除,但相应的:idx条目在Redis中仍然是孤立的 建议的解决方案之一是启用KeyspaceEvents,以便Redis在清理作业期间自动删除过期条目的索引 不幸的是,这个解决方案不适用于我们的Spring Boot应用程序,因为我们在云环境中使用Redis Enterprise作为提供的服务,这不允许我们进行任何配置更改(CONFIG命令被禁用) 以下是我所尝试的: @Configuration

我发现了以下关于Redis中索引过期问题的问题()

问题是主条目和
: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.jedisdataetexception:ERR未知命令'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命令

这由以下弹簧代码实现:

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,这意味着所有事件都将被通知。

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

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

@Configuration
@EnableRedisRepositories(enableKeyspaceEvents = EnableKeyspaceEvents.ON_STARTUP, basePackages = {
    "com.aaaaa.bbbbb.persistence.model.repository" }, keyspaceNotificationsConfigParameter = "")
将“keyspaceNotificationsConfigParameter”属性设置为空字符串时,不会执行在AWS Redis中不起作用的CONFIG命令,但通过这种方式,将实例化过期事件侦听器

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

这由以下弹簧代码实现:

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,这意味着将通知所有事件。

AFAIK密钥空间通知在企业版中受支持-最好将此问题直接发送到support@redislabs.com提供您正在使用的服务提供商和云环境的详细信息。谢谢,我一定会写出来的!关键是,启用KeyspaceEvents需要启用
CONFIG
命令,而对于受保护的Redis环境,情况并非如此…:-/企业版支持AFAIK密钥空间通知-最好将此问题直接提交给support@redislabs.com提供您正在使用的服务提供商和云环境的详细信息。谢谢,我一定会写出来的!关键是,启用KeyspaceEvents需要启用
CONFIG
命令,而对于受保护的Redis环境,情况并非如此…:-/我试过这个。我在启动过程中并没有遇到错误,但它并没有清理SpringDataRedis创建的索引。你知道怎么修吗?我试过了。我在启动过程中并没有遇到错误,但它并没有清理SpringDataRedis创建的索引。你知道怎么解决这个问题吗?