データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

Redisでのハッシュの使用

Redisでのハッシュの使用

Redisのハッシュは、フィールドと値の両方が文字列である単一のキーの下に、関連付けられたフィールドと値のペアを格納する方法です。 Redisでは、データ構造全体と、構造内の各フィールドの両方を変更できます。これにより、アプリケーション内のオブジェクトの優れた(そして非常に高速な)バッキングストアになります。

CLIの例

2つのフィールドでハッシュを作成します:

127.0.0.1:6379> HMSET my_hash key1 "foo" key2 "bar"
OK

ハッシュに関連付けられているフィールドと値を一覧表示します:

127.0.0.1:6379> HGETALL my_hash
1) "key1"
2) "foo"
3) "key2"
4) "bar"

フィールドの1つの値を更新します:

127.0.0.1:6379> HSET my_hash key1 "xyzzy"
(integer) 0
127.0.0.1:6379> HGET my_hash key1
"xyzzy"

ハッシュから単一のフィールドを削除します:

127.0.0.1:6379> HDEL my_hash key2
(integer) 1
127.0.0.1:6379> HGETALL my_hash
1) "key1"
2) "xyzzy"

ハッシュを削除します:

127.0.0.1:6379> DEL my_hash
(integer) 1
127.0.0.1:6379> HGETALL my_hash
(empty list or set)

Redisの優れたドキュメントには、ハッシュに使用できるコマンドに関する詳細情報があります。そこからコピーして貼り付けることはしません。代わりに、私たちは彼らと少し楽しむつもりです。

ドウェムシーの配列!

Dwemthy’s Arrayは、Why’s(poignant)guide to Ruby のWhytheLucky Stiffによって書かれたロールプレイングゲーム(RPG)の小さな例です。 Rubyメタプログラミングの説明に役立ちます。ここでは、同じRPGのアイデアを採用し、Redisハッシュを使用して実装します(Redisアレイの助けを少し借りて)。

配列内の各モンスターのハッシュを次のように作成します:

name: "AssistantViceTentacleAndOmbudsman"
life: 320
strength: 6
charisma: 144
weapon: 50

アレイの深さを詳しく調べる例を次に示します。

>>> import redis
>>> import dwemthy
>>> conn = redis.StrictRedis(host="localhost", port=6379)
>>> dw = dwemthy.Array.new(conn,
      {
        "name": "AssistantViceTentacleAndOmbudsman",
        "life": 320,
        "strength": 6,
        "charisma": 144,
        "weapon": 50
      }
    )
"[Get ready. AssistantViceTentacleAndOmbudsman has emerged!]"
>>> rabbit = dwemthy.Rabbit(dw)
>>> rabbit.sword()
"[You hit with 2 points of damage!]"
"[Your enemy hit with 10 points of damage!]"
"[Rabbit has died!]"

従う場合は、コード全体を次に示します:dwemthy.py

コードのハイライト

まず、ユーザーが提供されたファクトリメソッドを使用して配列を作成すると、データ構造が設定され、新しいdwemthy.Arrayオブジェクトが返されます。

class Array(object):
    list_key = "dwemethys_array"

    ...

    @classmethod
    def new(cls, conn, *bad_guys):
        """ Create a new set of problems for our hero to boomerang! """

        conn.delete(cls.list_key)

        # Give each bad guy a cozy spot in the array!
        for bad_guy in bad_guys:
            key = uuid.uuid4()
            conn.hmset(key, bad_guy)
            conn.rpush(cls.list_key, key)

        dw_list = cls(conn)
        dw_list.next_enemy()
        return dw_list

ここのconn.hmsetは、悪者のハッシュを作成します。それが発生したら、悪意のあるユーザーのキーをRedisリストにプッシュします。このリストは、ここでは単純なキューとして使用されています。

すべての悪意のあるユーザーが設定されたら、Array.next_enemy()メソッドを使用して配列の先頭にある悪意のあるユーザーの準備ができていることを確認します。

class Array(object):    
    list_key = "dwemethys_array"

    ...

    def next_enemy(self):
        """ Bring out the next enemy for our rabbit to face! """

        # We're moving on!
        if self.current != None:
            self.conn.delete(self.current)

        enemy_key = self.conn.lpop(self.list_key)

        if enemy_key is None:
            # Like a boss!
            print "[Whoa.  You decimated Dwemthy's List!]"
        else:
            # Get the new enemy ready!
            self.current = enemy_key
            print "[Get ready. {} has emerged!]".format(self["name"])

最後の行のself[“ name”]は、配列オブジェクトの__setitem__メソッドと__getitem__メソッドを定義することによって行われます。これにより、配列をほとんどpython dictとして扱うことができ、現在の悪意のあるユーザーのフィールドを簡単にフェッチおよび変更できます。

class Array(object):

    ...

    def __setitem__(self, key, value): 
        self.conn.hset(self.current, key, value)

    def __getitem__(self, key):
        value = self.conn.hget(self.current, key)

        # hashes only store strings!
        if key != "name":
            return int(value)

        return value

結論

Redisでハッシュを変更できる無数の方法により、開発者はハッシュを使用して多数の問題を解決できます。この投稿によって、自分のプロジェクトで使用するアイデアが得られたと思います。


  1. Redisのユースケーストップ5

    2017年11月7日にObjectRocket.com/blogで最初に公開されました。 この投稿では、これらの選択に影響を与える最も一般的なRedis™のユースケースとさまざまな特性について説明します。 1。セッションキャッシュ Redisの最も明白なユースケースの1つは、Redisをセッションキャッシュとして使用することです。 Memcachedなどの他のセッションストアよりもRedisを使用する利点は、Redisが永続性を提供することです。キャッシュを維持することは、一貫性に関して通常はミッションクリティカルではありませんが、ほとんどのユーザーは、カートセッションがすべてなくなる

  2. 上位5つのRedisユースケース

    この投稿では、Redisの最も一般的なユースケースのいくつかと、これらの選択に影響を与えるさまざまな特性について説明します。 1。セッションキャッシュ Redisの最も明白なユースケースの1つは、Redisをセッションキャッシュとして使用することです。 Memcachedなどの他のセッションストアよりもRedisを使用する利点は、Redisが永続性を提供することです。キャッシュの維持は通常、一貫性に関してミッションクリティカルではありませんが、ほとんどのユーザーは、カートセッションがすべて終了した場合、正確に楽しむことができません。 幸いなことに、Redisが何年にもわたって取り上げてき