# utils/seen_store.py import os, redis from typing import Iterable REDIS_URL = os.environ.get("REDIS_URL", "redis://localhost:6379/0") r = redis.from_url(REDIS_URL, decode_responses=True) def seen_key(username: str) -> str: return f"ig:seen:{username}" def mark_seen(username: str, ids: Iterable[str]) -> None: if not ids: return r.sadd(seen_key(username), *ids) def filter_unseen(username: str, ids: Iterable[str]) -> list[str]: # pipeline for speed key = seen_key(username) pipe = r.pipeline() for i in ids: pipe.sismember(key, i) flags = pipe.execute() return [i for i, seen in zip(ids, flags) if not seen]