python操作redisのいくつかの例

主に、Python操作の順序付きコレクション[redis](https://cloud.tencent.com/product/crs?from=10680)と、分散ロックの機能を実現するためのredisの使用について紹介します。

1. redis#でコレクションを注文しました

順序付けられたセットは、セットとハッシュの混合に似たデータタイプです。セットと同様に、ソートされたセットは、一意の繰り返されない文字列要素で構成されているため、ある意味では、順序付けられたセットもセットです。ただし、セット内の要素は並べ替えられませんが、並べ替えられたセット内の各要素は、スコアと呼ばれる浮動小数点値に関連付けられます(これが、各要素がハッシュに似ている理由です。すべて値にマップされます)。さらに、順序付けられたセットの要素は順番に並んでいます(したがって、要求に応じて並べ替えられず、並べ替えられたセットのデータ構造の特殊性を示すために順序が使用されます)

2、redisの一般的な注文セットの説明#

1. redisを接続します##

import redis
r = redis.Redis(**config.REDIS_CONF)

2. zadd

順序付けられたセットに追加された1人以上のメンバー、またはスコアがすでに存在する場合は更新されたスコア

redis.zadd('my-key','name1',1.1,'name2',2.2, name3=3.3,name4=4.4)

3. zrangebyscore

順序付けられたセットの指定されたスコア範囲のメンバーを、低スコアから高スコアの順に並べ替えて返します。

r.zrangebyscore(name, min, max, start=None, num=None,withscores=False, score_cast_func=float)

'' start ''および 'num' 'が指定されている場合、スライスされた範囲が返されます。
'' withscores ''は、スコアと値を返すことを意味します。戻りタイプは(値、スコア)ペアのリストです
'score_cast_func' 'スコアの戻り値を変換するために使用される呼び出し可能な関数

4. zrange

ソートされたセット '' name '' '' start ''と '' end ''の間の値の範囲を昇順で返します。

zrange(self, name, start, end, desc=False, withscores=False,score_cast_func=float):

'start' 'および' 'end' 'は昇順で配置されます。

startendは負の値で、範囲の終わりを示します。

'' desc ''結果を下向きにソートするかどうかを示すブール値

'' withscores ''は、スコアと値を返すことを意味します。
戻りタイプは(値、スコア)ペアのリストです

'' score_cast_func ''スコアの戻り値を変換するために使用される呼び出し可能な関数

第三に、redisを使用して分散ロックを実装します#

分散ロックコードを作成しました。スクリプトを展開するマシンが複数ある場合、同時にスクリプトを実行するのは1台のマシンだけです。ロック機能のデコレータを作成しました。

def check_lock(func_or_cls):"""
 redis分散ロック
 : param func_or_cls::return:"""
 def wapper(self,*args,**kwargs):
  job_lock = r.set(self.lock_name,1, ex=60, nx=True)if job_lock is True:try:
    res =func_or_cls(self,*args,**kwargs)
   except Exception:
    res = None
   r.delete(self.lock_name)return res
  else:
   pass
 return wapper

使用例:

classMqMessageHandler(object):"""各トピックに対応する操作"""

 @ staticmethod
 def topic_call_back(msg):"""
  トピック購読後の操作
  : param msg::return:"""
  Loggers(log_name='MqMessageHandler')
  flag, text_json =bytes_to_dict(msg.body)  #バイトタイプを辞書タイプに変換します
  logging.info({"msg_id": msg.id,"msg_body": msg.body,"text_json": text_json})
  now_date = Utils.get_date_str().replace("-","")  #今日の日付を取得
  now_time = Utils.timestamp_second()if msg.body == b'OK':
   refresh_key = f"media_auth_refresh_{now_date}"
   r.zadd(refresh_key, now_time,0)   #順序付けられた主要な現在のタイムスコアのセットに参加します(0は新しいアクションが必要であることを意味します)
  elif flag:
   new_key = f"media_auth_new_{now_date}"
   r.zadd(new_key, text_json,0)else:
   logging.error({"msg_id": msg.id,"msg_body": msg.body})

ロックは主にsetメソッドによって実現されます。setメソッドの詳細な説明は次のとおりです。

def set(self, name, value, ex=None, px=None, nx=False, xx=False):"""
  Set the value at key ``name`` to ``value````ex`` sets an expire flag on key ``name``for``ex`` seconds.``px`` sets an expire flag on key ``name``for``px`` milliseconds.``nx``ifset to True,set the value at key ``name`` to ``value`` only
   if it does not exist.``xx``ifset to True,set the value at key ``name`` to ``value`` only
   if it already exists."""

nxが設定されている場合、パラメータnxの特性に基づいています=True ,この名前に対応する値が存在しない場合にのみ、Trueが返されます。

Recommended Posts

python操作redisのいくつかの例
Python3.10のいくつかの新機能
Pythonイールドの使用例の分析
word2vec操作のPython予備実装
pythonselenium操作cookieの実装
pythonアクセスAlipayの操作例
python accesshdfsの操作
Python3.9の7つの機能
Pythonファイル操作
100の小さなPythonの例
Python操作の一般的なメソッドの分析Jiraライブラリ
Pythonで実装された特徴抽出操作の例
Pythonを使用してKSを計算する詳細な例
PythonWebページパーサーの使用例の詳細な説明
Python構文の基本
Python操作SQLiteデータベース
Pythonの基本構文
pythonのPrettytableモジュール
Python操作yaml命令
09.Python3の共通モジュール
Pythonのハードコア操作を1分で学ぶ
Pythonの自動操作とメンテナンス2
Python操作Excelマージセル
Python(7)の基盤を統合する
pythonリスト(LIST)の深い理解
Pythonのタプルの添え字
wavファイルのPython分析
Python(6)の基盤を統合する
Pythonの負の弾性率の操作例
PythonクローラーのJSの分析
栄光のパイソンキング壁紙
gomokuプログラムのPython実装
Pythonサンドボックスエスケープの分析
Pythonマルチスレッドの深い理解
Pythonの自動操作とメンテナンス1
Pythonオブジェクト指向プログラミングの分析
OpenCVインストールのPythonバージョン
クイックスタートPythonファイル操作
Pythonの9つの機能エンジニアリング手法
python描画モジュールのmatplotlib
パラメータを渡すPythonメソッド
Pythonの基盤を統合する(3)
Python共通モジュールのコレクション