- 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」軍曹を参考にさせていただきました。
|
|