Python - よく使うモジュール - データベース - redis


 クラウディア


1. 概要
2. インストール
3. 使い方
4. 参考サイト

1. 概要

 「redis」は、ずばり「redis」のデータベースアクセスに使用するモジュールです。

2. インストール

 「pip」でインストールする場合は。

pip install redis
 「FreeBSD」で、「ports」を使用してインストールする場合は。

cd /usr/ports/databases/py-redis

make config

 オプションは、デフォルトのままにしておきます。


make NO_DIALOG=yes

make install
 使い方なんぞは、機会があれば、いずれ・・・。

3. 使い方

 使い方を軽く。  以下は、実際に動作しているソースの抜粋です。

import dns.resolver
import dns.reversename
import redis

# DNS逆引き(キャッシュ付き)
redis_client = redis.Redis(host='localhost', port=6379, db=1)
CACHE_TTL = 60 * 60 * 24 * 7  # 7日

dns_cache = {}
resolver = dns.resolver.Resolver()
resolver.lifetime = 0.5

def gethostbyaddr(ip):

  cached = redis_client.get(f"dns:{ip}")
  if cached is not None:
    value = cached.decode()
    return None if value == "NULL" else value

  # DNS問い合わせ
  try:
    rev = dns.reversename.from_address(ip)
    answer = resolver.resolve(rev, "PTR")
    domain = str(answer[0]).rstrip(".")
  except Exception:
    domain = None

  # Redis保存(NULLも保存=無駄問い合わせ防止)
  redis_client.setex(f"dns:{ip}", CACHE_TTL, domain if domain is not None else "NULL")

  return domain
 上記は、アクセスログを処理しているソースの抜粋になりますが。  その中で、アクセスしてきている「IP」アドレスから逆引きで、アクセスしているマシンのドメイン名を取得して、「redis」にアドレスからドメイン名をひけるように設定しています。  この処理が必要なのは、「DNS」の逆引きは、それなりに時間のかかる処理なので、一度ひいたアドレスは、レコードに残しておいて、同じアドレスを何度も逆引きせずに済むようにしています。  6行目は、ホスト名・ポート番号・データベース番号を使用して、データベースへの接続を行っています。  7行目は、レコードの「TTL(Time To Live)」を1週間として定義しています。  13~31行目全体で、入力引数の「IP」アドレスから、ドメイン名を引いて返しています。  15~18行目で、レコードに既存のものがあった場合、レコードに設定してあるドメイン名を返しています。  レコードが「NULL」のものは、逆引きできなかったもので、ある意味これが一番時間がかかるもので、それはそれで、「NULL」として登録しており、関数としては、「python」の「None」値を返しています。  29行目で、逆引きの結果を、「redis」に登録しています。

4. 参考サイト

 本ページは、「ChatGPT」軍曹を参考にさせていただきました。

TikTok Shop 【リピート用プログラム】
AbemaTV 無料体験