PythonコードをRedisサーバーに接続するために、通常のredis
パッケージを使用しています。
コードの一部として、文字列オブジェクトがRedisサーバーキーに存在するかどうかを確認します。
string = 'abcde'
if string in redis.keys():
do something..
何らかの理由で、redis.keys()は[b'abcde']
などのバイトオブジェクトのリストを返しますが、私の文字列はもちろんstr
オブジェクトです。
私はすでにcharset
、encoding
およびdecode_responses
をredisジェネレーターに設定しようとしましたが、助けにはなりませんでした。
私の目標は、データを文字列として先に挿入し、キーリストを反復処理せずに、チェック中に各要素をstr()に変更することです。
先に感謝します
[〜#〜] exists [〜#〜] コマンドを使用して、コードを次のように再構築した方が良いでしょう。
string = 'abcde'
if redis.exists(string):
do something..
KEYS操作は、Redisデータベース内のすべてのキーを返し、本番環境で深刻なパフォーマンスの低下を引き起こします。副作用として、バイナリから文字列への変換を処理する必要がなくなります。
StrictRedis
コンストラクターのdecode_responses
引数を使用して、応答をバイトから文字列に自動的に変換するようにRedisクライアントを構成できます。
r = redis.StrictRedis('localhost', 6379, charset="utf-8", decode_responses=True)
クライアント間のcharset
オプションと一貫していることを確認してください。
デコードのためにリストを繰り返したくない場合は、自動的にデコードを実行するようにredis接続を設定すると、必要な結果を受け取ります。接続文字列で次のように、decode_responses引数に注意してください。
rdb = redis.StrictRedis(Host="localhost", charset="utf-8", port=6379, db=0, decode_responses=True)
ハッピーコーディング! :-)
以前の回答は、decode_responses
接続パラメーターは、これを自動的に行うために必要です。彼らが省略しているのは、接続がプールを使用して行われる場合、代わりにConnectionPoolで設定する必要があるということです。以下のスニペットは、接続中にクライアントが自身をFalseに設定した場合でも、すべてのクライアントの 'decode_responses'値をtrueに設定します
pool = redis.ConnectionPool(Host=REDIS_Host, port=REDIS_PORT, db=REDIS_DB, password=REDIS_PWD, decode_responses=True)