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でハッシュを変更できる無数の方法により、開発者はハッシュを使用して多数の問題を解決できます。この投稿によって、自分のプロジェクトで使用するアイデアが得られたと思います。
-
Redisのユースケーストップ5
2017年11月7日にObjectRocket.com/blogで最初に公開されました。 この投稿では、これらの選択に影響を与える最も一般的なRedis™のユースケースとさまざまな特性について説明します。 1。セッションキャッシュ Redisの最も明白なユースケースの1つは、Redisをセッションキャッシュとして使用することです。 Memcachedなどの他のセッションストアよりもRedisを使用する利点は、Redisが永続性を提供することです。キャッシュを維持することは、一貫性に関して通常はミッションクリティカルではありませんが、ほとんどのユーザーは、カートセッションがすべてなくなる
-
上位5つのRedisユースケース
この投稿では、Redisの最も一般的なユースケースのいくつかと、これらの選択に影響を与えるさまざまな特性について説明します。 1。セッションキャッシュ Redisの最も明白なユースケースの1つは、Redisをセッションキャッシュとして使用することです。 Memcachedなどの他のセッションストアよりもRedisを使用する利点は、Redisが永続性を提供することです。キャッシュの維持は通常、一貫性に関してミッションクリティカルではありませんが、ほとんどのユーザーは、カートセッションがすべて終了した場合、正確に楽しむことができません。 幸いなことに、Redisが何年にもわたって取り上げてき