invcache-fix6
This commit is contained in:
parent
7c85f51436
commit
ae7580252b
56
cache/cache.py
vendored
56
cache/cache.py
vendored
|
@ -348,8 +348,29 @@ async def invalidate_shouts_cache(cache_keys: List[str]):
|
||||||
"""
|
"""
|
||||||
for key in cache_keys:
|
for key in cache_keys:
|
||||||
try:
|
try:
|
||||||
await redis_operation('DEL', key)
|
# Формируем полный ключ кэша
|
||||||
await redis_operation('SETEX', f"{key}:invalidated", value="1", ttl=CACHE_TTL)
|
cache_key = f"shouts:{key}"
|
||||||
|
|
||||||
|
# Удаляем основной кэш
|
||||||
|
await redis_operation('DEL', cache_key)
|
||||||
|
logger.debug(f"Invalidated cache key: {cache_key}")
|
||||||
|
|
||||||
|
# Добавляем ключ в список инвалидированных с TTL
|
||||||
|
await redis_operation('SETEX', f"{cache_key}:invalidated", value="1", ttl=CACHE_TTL)
|
||||||
|
|
||||||
|
# Если это кэш темы, инвалидируем также связанные ключи
|
||||||
|
if key.startswith("topic_"):
|
||||||
|
topic_id = key.split("_")[1]
|
||||||
|
related_keys = [
|
||||||
|
f"topic:id:{topic_id}",
|
||||||
|
f"topic:authors:{topic_id}",
|
||||||
|
f"topic:followers:{topic_id}",
|
||||||
|
f"topic:stats:{topic_id}"
|
||||||
|
]
|
||||||
|
for related_key in related_keys:
|
||||||
|
await redis_operation('DEL', related_key)
|
||||||
|
logger.debug(f"Invalidated related key: {related_key}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error invalidating cache key {key}: {e}")
|
logger.error(f"Error invalidating cache key {key}: {e}")
|
||||||
|
|
||||||
|
@ -386,18 +407,37 @@ async def invalidate_shout_related_cache(shout: Shout, author_id: int):
|
||||||
"""
|
"""
|
||||||
Инвалидирует весь кэш, связанный с публикацией
|
Инвалидирует весь кэш, связанный с публикацией
|
||||||
"""
|
"""
|
||||||
|
# Базовые ленты
|
||||||
cache_keys = [
|
cache_keys = [
|
||||||
"feed",
|
"feed", # основная лента
|
||||||
f"author_{author_id}",
|
f"author_{author_id}", # публикации автора
|
||||||
"random_top",
|
"random_top", # случайные топовые
|
||||||
"unrated"
|
"unrated", # неоцененные
|
||||||
|
"recent", # последние публикации
|
||||||
|
"coauthored", # совместные публикации
|
||||||
|
f"authored_{author_id}", # авторские публикации
|
||||||
|
f"followed_{author_id}", # подписки автора
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Добавляем ключи для всех авторов публикации
|
||||||
|
for author in shout.authors:
|
||||||
|
cache_keys.extend([
|
||||||
|
f"author_{author.id}",
|
||||||
|
f"authored_{author.id}",
|
||||||
|
f"followed_{author.id}",
|
||||||
|
f"coauthored_{author.id}"
|
||||||
|
])
|
||||||
|
|
||||||
# Добавляем ключи для тем
|
# Добавляем ключи для тем
|
||||||
for topic in shout.topics:
|
for topic in shout.topics:
|
||||||
cache_keys.append(f"topic_{topic.id}")
|
cache_keys.extend([
|
||||||
cache_keys.append(f"topic_shouts_{topic.id}")
|
f"topic_{topic.id}",
|
||||||
|
f"topic_shouts_{topic.id}",
|
||||||
|
f"topic_recent_{topic.id}",
|
||||||
|
f"topic_top_{topic.id}"
|
||||||
|
])
|
||||||
|
|
||||||
|
# Инвалидируем все ключи
|
||||||
await invalidate_shouts_cache(cache_keys)
|
await invalidate_shouts_cache(cache_keys)
|
||||||
|
|
||||||
|
|
||||||
|
|
2
cache/revalidator.py
vendored
2
cache/revalidator.py
vendored
|
@ -1,6 +1,6 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from cache.cache import cache_author, cache_topic, get_cached_author, get_cached_topic, get_cached_entity
|
from cache.cache import cache_author, cache_topic, get_cached_author, get_cached_topic
|
||||||
from resolvers.stat import get_with_stat
|
from resolvers.stat import get_with_stat
|
||||||
from utils.logger import root_logger as logger
|
from utils.logger import root_logger as logger
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user