11

通常、キー セットを取得してから、look を使用して各キーと値のペアを削除します。

パターンを介してすべてのキーを削除することは可能ですか?

すなわち:

Del sample_pattern:*
4

5 に答える 5

5

evalを使用してみてください。私は Lua の専門家ではありませんが、このコードは機能します。

private static final String DELETE_SCRIPT_IN_LUA =
    "local keys = redis.call('keys', '%s')" +
    "  for i,k in ipairs(keys) do" +
    "    local res = redis.call('del', k)" +
    "  end";

public void deleteKeys(String pattern) {
  Jedis jedis = null;

  try {
    jedis = jedisPool.getResource();

    if (jedis == null) {
      throw new Exception("Unable to get jedis resource!");
    }

    jedis.eval(String.format(DELETE_SCRIPT_IN_LUA, pattern));  
  } catch (Exception exc) {
    if (exc instance of JedisConnectionException && jedis != null) {
      jedisPool.returnBrokenResource(jedis);
      jedis = null;
    }

    throw new RuntimeException("Unable to delete that pattern!");
  } finally {
    if (jedis != null) {
      jedisPool.returnResource(jedis);
    }
  }
}

そして、次のように呼び出します。

deleteKeys("temp:keys:*");

これにより、1 回のサーバー側呼び出しと複数回の削除操作が保証されます。

于 2014-05-03T12:01:12.233 に答える
3

Redissonを使用して 1 行で実行できます。

redisson.getKeys().deleteByPattern(pattern)
于 2015-11-29T16:49:02.390 に答える