Python で Redis データベースのすべてのキーを取得する
-
keys()
を使用して、Redis データベースのすべてのキーを取得する -
scan_iter()
を使用して、Redis データベースのすべてのキーを取得する -
zip_longest
を使用して Redis データベースのすべてのキーを取得する
JSON を知っていれば、Redis の設計システムになじみがあるでしょう。 key-value
構造と分散およびインメモリ アプローチを使用して、回復力のあるデータベースを実現します。
ハッシュ、リスト、セット、ソート済みセット、文字列、JSON、およびストリームは、Redis がサポートする多くのデータ構造の 1つです。 このオープンソース データベースは、Python を含むさまざまな言語をサポートしています。Python を使用してバックエンド システムを開発している場合は、いくつかのモジュールとパッケージが役立ちます。
データベースでよく行う多くの操作の 1つはデータの取得です。Redis
のようなデータベースでは、そのような操作を行うためにキーが重要です。
この記事では、Redis データベース内のすべてのキーの取得について説明します。
keys()
を使用して、Redis データベースのすべてのキーを取得する
redis
を利用するには、それをインストールする必要があります。 Redis ダウンロード ページ でその方法を確認できます。 Linux および macOS ユーザーにとっては、非常に簡単です。 ただし、Windows ユーザーの場合は、Windows Subsystem for Linux (WSL2) を使用する必要がある場合があり、その指示に従うことができます ビデオ ガイド。
Redis データベースがセットアップされていることを前提として、Redis データベースへのクライアント アクセスを提供する redis
パッケージをインストールします。 インストールするには、pip
コマンドを使用します。
pip install redis
出力:
Collecting redis
Downloading redis-4.3.4-py3-none-any.whl (246 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 246.2/246.2 kB 794.4 kB/s eta 0:00:00
Collecting deprecated>=1.2.3
Downloading Deprecated-1.2.13-py2.py3-none-any.whl (9.6 kB)
Collecting async-timeout>=4.0.2
Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting packaging>=20.4
Downloading packaging-21.3-py3-none-any.whl (40 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 kB 1.9 MB/s eta 0:00:00
Collecting wrapt<2,>=1.10
Downloading wrapt-1.14.1-cp310-cp310-win_amd64.whl (35 kB)
Collecting pyparsing!=3.0.5,>=2.0.2
Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 624.8 kB/s eta 0:00:00
Installing collected packages: wrapt, pyparsing, async-timeout, packaging, deprecated, redis
Successfully installed async-timeout-4.0.2 deprecated-1.2.13 packaging-21.3 pyparsing-3.0.9 redis-4.3.4 wrapt-1.14.1
そのため、redis
パッケージは wrapt
、pyparsing
、async-timeout
、packaging
、および非推奨のモジュールを使用してそのモジュールを強化します。
redis
パッケージを利用するには、それをインポートする必要があります。
import redis
主な問題に移ると、redis
モジュールによって提供される keys()
メソッドを使用して、すべてのキーにアクセスして取得できます。
key()
メソッド は、指定された Redis データベースから引数内で渡されたパターンに一致するキーのリストを返します。 引数が渡されない場合、すべてのキーを意味する *
というデフォルトのパターンがあります。
メソッドが機能していることを示すために、+Key
ボタンまたは次のコードを使用して、redis
データベースにエイリアス Temp
といくつかのキーを手動で事前設定しました。
import redis
redisHost = "localhost"
redisPort = 6379
redisDecodeRes = True
r = redis.StrictRedis(host=redisHost, port=redisPort, decode_responses=redisDecodeRes)
r.set("ConnectionPool", "Ox1212af34w3141")
上記のコードにより、キー ConnectionPool
が対応する値とともに Temp
データベースに追加されます。
set()
メソッドは key-value
ペアをデータベースに適用し、StrictRedis()
メソッドはデータベースへのアクセスを提供する Redis 接続オブジェクトを作成します。
GUI を介してデータベース (別名 Temp
) とそのキーを表示するには、画像に示すように RedisInsight
アプリケーションを使用できます。
key()
メソッドをテストするために、合計 11 個のキーが手動でデータベースに追加されました。
次に、key()
メソッドに対して、StrictRedis()
メソッドを使用して、キーにアクセスするための Redis 接続オブジェクトを作成する必要があります。 host
、port
、および decode_responses
引数は、接続のパラメーターを定義するために渡されます。
host
と port
はホスト名とポート番号を定義し、decode_responses
は渡されたデータが簡単に操作できる Python 文字列にデコードされることを定義します。 引数が渡されないため、keys()
メソッドは利用可能なすべてのキーにアクセスします。
import redis
redisHost = "localhost"
redisPort = 6379
redisDecodeRes = True
r = redis.StrictRedis(
host=redisHost, port=redisPort, decode_responses=redisDecodeRes, db=0
)
print(r.keys())
出力:
['bar-two', 'information', 'bar-one', 'details', 'foo', 'jinku', 'bar', 'User-One', 'delft', 'bar-three', 'ConnectionPool']
Temp
データベースにすべてのキーのリストがあり、これを使用できます。
必要なキー パターンがある場合は、それを引数として渡すことができます。 bar
で始まるすべてのキーをリストしてみましょう。
print(r.keys(pattern="bar*"))
出力:
['bar-two', 'bar-one', 'bar', 'bar-three']
scan_iter()
を使用して、Redis データベースのすべてのキーを取得する
大規模なデータベースでは、scan_iter()
を使用すると、Python アプリケーション内でデータをより適切に管理できます。 また、key()
メソッドはサーバーをブロックし、他の使用操作を防ぎます。scan_iter()
を使用すると、バッチベースの操作で他の使用操作が許可されます。
keys()
の方が高速かもしれませんが、複数のリクエストベースのシステムには向いていません。
それでは、実際に見てみましょう。
import redis
redisHost = "localhost"
redisPort = 6379
redisDecodeRes = True
try:
r = redis.StrictRedis(
host=redisHost, port=redisPort, decode_responses=redisDecodeRes, db=0
)
for key in r.scan_iter(match="bar*"):
print(key)
except Exception as e:
print(e)
出力:
bar-three
bar-one
bar-two
bar
try/except
を使用すると、データベースを操作しようとするときに接続の問題に対処するのに役立ちます。 StrictRedis()
を使用して接続した後、match
引数を使用して探しているキー パターンを定義し、結果をループしてキーを提供します。
zip_longest
を使用して Redis データベースのすべてのキーを取得する
前述したように、多数のキーを持つ大規模なデータベースの場合、scan_iter()
メソッドの方が優れていますが、結果をより適切に管理するために、指定された数のバッチでキーを取得することにより、さらに改善できます。
batch
を作成するには、さまざまなケースで使用できるさまざまな反復子 (またはメソッド) を提供する itertools
モジュールが必要です。 itertools
モジュール内には、.next()
メソッドがタプルを返し、渡された iterable から要素を集約する zip_longest
オブジェクトを返す zip_longest
メソッド があります。
zip_longest()
メソッドを使用して、渡された引数に応じて、指定された数のキーのバッチを作成する関数を作成できます。 たとえば、多くの場合に使用できる 2つのバッチを作成します。
import redis
from itertools import zip_longest
redisHost = "localhost"
redisPort = 6379
redisDecodeRes = True
try:
r = redis.StrictRedis(
host=redisHost, port=redisPort, decode_responses=redisDecodeRes, db=0
)
def batch(iterable, num):
initIter = [iter(iterable)] * num
return zip_longest(*initIter)
for keyBatch in batch(r.scan_iter("bar*"), 2):
print(keyBatch)
except Exception as e:
print(e)
出力:
('bar-three', 'bar-one')
('bar-two', 'bar')
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn