Удалите весь hset из Redis (Jedis), возникли проблемы, поскольку он просто не удалит - PullRequest
0 голосов
/ 14 октября 2018

pipe.hset (uuid, "name", "Archie");

Это пример того, как я использую hset.Существует около 10 других атрибутов (имя, возраст и т. Д.).

Я пытаюсь удалить весь hset, например удалить uuid, чтобы он больше не являлся ключом (является ли ключ правильным термином?).

Я пытался удалить каждый элемент по отдельности через конвейер;

for (String s : profileData)  {
                pipe.hdel("profile@" + uuid.toString(), s);
           }

Но, во-первых, это имеет временную сложность O (n) и поэтому может быть более эффективным, а во-вторых, на самом деле не работаетдля меня, так как ключи все еще присутствуют (думаю, что это может быть моей собственной ошибкой кодирования).

Я видел вопросы, спрашивающие о функции hdelall, и я знаю, что она не существует.

Я также пытался использовать,

pipe.del(uuid);

Но это ничего не делает - поэтому, очевидно, я использую это неправильно.Я предполагал, что это просто удалит весь hset, но это не так, его нужно использовать для удаления одного значения вместо?Я не уверен.

Так что мой вопрос сводится к;Как я могу эффективно удалить весь hset из Redis, , используя Jedis .

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я не уверен, как выглядит ваш код, но я провел этот быстрый тест, и он сработал для меня, как и ожидалось.

    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    import redis.clients.jedis.Pipeline;

    import java.time.Duration;
    import java.util.Set;       

public class TestRedisDelete {
    public static void main(String[] args) {

        TestRedisDelete redis = new TestRedisDelete();
        Pipeline p = redis.jedisPool.getResource().pipelined();
        p.hset("h1", "f", "v");
        p.hset("h2", "f", "v");
        p.hset("h3", "f", "v");
        p.del("h1");
        p.sync();

        Set<String> keys = redis.jedisPool.getResource().keys("*");
        System.out.println(keys);
    }

    final JedisPoolConfig poolConfig = buildPoolConfig();
    JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);

    private JedisPoolConfig buildPoolConfig() {
        final JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(10);
        poolConfig.setMaxIdle(10);
        poolConfig.setMinIdle(4);
        poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(true);
        poolConfig.setTestWhileIdle(true);
        poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis());
        poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis());
        poolConfig.setNumTestsPerEvictionRun(3);
        poolConfig.setBlockWhenExhausted(true);
        return poolConfig;
    }
}

Вывод: [h2, h3]

0 голосов
/ 14 октября 2018

Как насчет использования метода удаления JEDIS

jedis.del(uuid);

Проверьте эту ссылку для получения более подробной информации

...