name.ハッシュ型¶Redisハッシュ型は順番がないRedis文字列型のフィールドと値のマップです。フィールドの追加、削除、確認をならしてO(1)で行うことができます。すべてのキー、値、またはその両方を一覧するのはO(N)で行うことができます。(Nはハッシュ内のフィールドの数です)Redisハッシュ型は面白い作りになっています。どのような点が面白いかというと、オブジェクトを表現するのにとても適した形になっているところです。ウェブアプリケーションユーザはたとえばユーザ名、暗号化されたパスワード、最終ログイン時刻などのフィールドを持ったRedisハッシュで表現されます。他のとても重要な機能として、少ないフィールド数で構築されたRedisハッシュは非常にメモリを使う量が少なく、すべてのフィールドをRedisキーの最上位レベルに刷るのと比べると一目瞭然です。(この値は設定可能です。詳細はredis.confを参考にしてください)Redisハッシュはアプリケーションが以前あるフィールドが存在したかどうか警告するために便利な値を返すようにつくられています。返すようにしています。1ハッシュあたり4億以上)です。実装の詳細¶Note翻訳あやしいRedisハッシュの内部表現は事実データ構造地震の名前が示すとおりハッシュ表となっています。この実装の欠点はハッシュ表のメタデータに多くの空間的オーバーヘッドがあるということです。Redisハッシュの面白い使い方としてオブジェクトエンコーディングがあります。オブジェクトはしばしばいくつかのフィールドにより構成されます。Redisではそれぞれにオブジェクトに異なる内部的に小さなハッシュ(以下小ハッシュ)を持っています。(Redisはハッシュを小さくするために、この小ハッシュのフィールド数には上限を設けています。各フィールドと値は設定されたバイト数以下でなければなりません。これらはすべて設定可能です。呼ばれるデータ構造を用いてエンコードされています。(zipmapはコンピュータサイエンス系の本を読んでも出てきません。Redis開発中に命名されました。)このデータ構造は非常にメモリを文字列を文字列に対応させるマッピングにおいてメモリを効率的に使う構造になっています。操作でO(1)ではなくO(N)になるという犠牲を払っても、メモリの低省を優先しました。このデータ構造が普遍である時間は非常に短く、また大きくなった場合にはハッシュ表に変換されるため、Redisハッシュの操作をならすとO(1)にはなっているはずです。実際に小さなzipmapは効率的なローカルキャッシュに素早くアクセスできるため小さなハッシュ表よりも遅いということはありません。結果として小ハッシュはメモリを効率的に使い、素早くアクセスでき、一方で大きなハッシュは早いけれどメモリ効率は小ハッシュよりも悪くなっています。ハッシュを持つ新しいキーが生成される。値を更新しただけの場合は0が返ります。新しいフィールドが作成された場合は1が返ります。replyが返ります。対応する値を取得します。フィールドが見つからない場合、あるはキーが見つからない場合は、nilが返ります。replyを返します。組を持った新しいハッシュが作成されますもしフィールドがすでに存在する場合、この操作はなんの処理もせず0を返します。セットして1を返します。replyを返します。(Nはフィールドの数)それぞれのフィールドにそれぞれの値をセットします。古い値を新しい値で置き換えます。キーが存在しない場合は、指定したハッシュを持った新しいキーが作成されます。replyが返ります。保持された値を取得します。指定したキーの内いくつかが存在しない場合、nilが返ります。存在しないキーに関しては空のハッシュと同等に扱われます。Replyが返ります。対する複数の値を持ったリストが返ります。値は指定したフィールドの順です。インクリメントします。組を持った新しいハッシュが作成されます。フィールドが存在しない、あるいは文字列を持っている場合は値は0となります。指定できる値の範囲は64bit符号付き整数の範囲内です。値は符号付きなので、インクリメントにもデクリメントにも使えます。replyが返ります。インクリメント後の新しい値が返ります。キーあるいはフィールドが存在しない場合は0が返ります。replyが返ります。フィールドがハッシュ内に存在する場合は、そのフィールドは削除され1が返ります。それ以外の場合は0が返り、なんの操作も行われません。replyが返ります。対応するハッシュに存在するエントリ(フィールド)数を返します。指定したキーが存在しない場合は、空のハッシュと同様に0が返ります。replyが返ります。対応するハッシュ内のすべてのフィールド名を返します。valueNの形で返します。Replyが返ります。