1

アイテムの値に特定の部分文字列が含まれているかどうかに基づいて、ハッシュからアイテムの束を削除する最も効率的な方法は何ですか?私の知る限り、これを1つの単純なブロックで行う方法は実際にはありません。Javaリストでそのハッシュのすべての値を文字通り取得し、必要なものが見つかるまでこのリストを繰り返し処理し、ハッシュからそのキーを削除して、同じ手順を何度も繰り返す必要があります。

私が試したもう1つのアプローチは、ハッシュアイテムへのID参照を別のリストに配置することでした。これにより、後で1回の呼び出しで、削除する必要のあるアイテムのIDのリストを取得できます。それは少し良かったのですが、それでも、私が使用しているredisの実装(Jedis)は、複数のハッシュキーの削除をサポートしていないため、手を縛られたままになっています。

Redisは参照整合性をサポートしていませんよね?つまり、OK、Redisリストに格納されているキーはハッシュ内のアイテムへの参照であるため、リストを削除すると、ハッシュから対応するアイテムが削除されます。Redisにはそのようなものはありませんよね?

このループを通過して、すべてのアイテムを個別に削除する必要があります。少なくとも、1000個の個別のコマンドではなく、1000個のコマンドをすべて収集して、1回の呼び出しで送信できるブロックのようなものがあればいいのにと思います。

4

2 に答える 2

1
I wish at least there was something like a block,
where I could collect all 1000 commands, and send them in one entire call,
rather than 1000 separate ones.

それがトランザクションの目的です: http://redis.io/topics/transactions

パイプラインを使用すると、クライアントが応答を待たずにコマンドを発行することを保証するだけであり、原子性を保証しないため、パイプライン化されたコマンドの間に他の接続されたクライアントからコマンドを発行できる可能性があります。

トランザクション内 (つまりMULTI / EXEC間) のコマンドはアトミックに発行されます。

于 2011-11-23T14:38:17.470 に答える
0

Redis リストの ID を削除しても、Redis ハッシュ フィールドには影響しません。高速化するには、パイプライン化を検討してください。ジェディスはそれをサポートしています...

于 2011-11-23T10:29:09.903 に答える