invalidation-follow-fix3
All checks were successful
Deploy on push / deploy (push) Successful in 3m12s
All checks were successful
Deploy on push / deploy (push) Successful in 3m12s
This commit is contained in:
@@ -58,7 +58,7 @@ async def follow(
|
|||||||
cache_key_pattern = f"author:follows-{entity_type}s:{follower_id}"
|
cache_key_pattern = f"author:follows-{entity_type}s:{follower_id}"
|
||||||
await redis.execute("DEL", cache_key_pattern)
|
await redis.execute("DEL", cache_key_pattern)
|
||||||
await redis.execute("DEL", f"author:id:{follower_id}")
|
await redis.execute("DEL", f"author:id:{follower_id}")
|
||||||
logger.debug(f"Инвалидирован кеш подписок В НАЧАЛЕ операции: {cache_key_pattern}")
|
logger.debug(f"Инвалидирован кеш подписок follower'а: {cache_key_pattern}")
|
||||||
|
|
||||||
entity_classes = {
|
entity_classes = {
|
||||||
"AUTHOR": (Author, AuthorFollower, get_cached_follower_authors, cache_author),
|
"AUTHOR": (Author, AuthorFollower, get_cached_follower_authors, cache_author),
|
||||||
@@ -150,6 +150,11 @@ async def follow(
|
|||||||
subscription_id=subscription_id,
|
subscription_id=subscription_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ✅ КРИТИЧНО: Инвалидируем кеш списка подписчиков автора
|
||||||
|
# чтобы новый подписчик сразу появился в списке
|
||||||
|
await redis.execute("DEL", f"author:followers:{entity_id}")
|
||||||
|
logger.debug(f"Инвалидирован кеш подписчиков автора: author:followers:{entity_id}")
|
||||||
|
|
||||||
# Инвалидируем кеш статистики авторов для обновления счетчиков подписчиков
|
# Инвалидируем кеш статистики авторов для обновления счетчиков подписчиков
|
||||||
logger.debug("Инвалидируем кеш статистики авторов")
|
logger.debug("Инвалидируем кеш статистики авторов")
|
||||||
await invalidate_authors_cache(entity_id)
|
await invalidate_authors_cache(entity_id)
|
||||||
@@ -277,15 +282,7 @@ async def unfollow(
|
|||||||
session.commit()
|
session.commit()
|
||||||
logger.info(f"Пользователь {follower_id} отписался от {what.lower()} с ID {entity_id}")
|
logger.info(f"Пользователь {follower_id} отписался от {what.lower()} с ID {entity_id}")
|
||||||
|
|
||||||
# Инвалидируем кэш подписок пользователя
|
# Кеш подписок follower'а уже инвалидирован в начале функции
|
||||||
cache_key_pattern = f"author:follows-{entity_type}s:{follower_id}"
|
|
||||||
await redis.execute("DEL", cache_key_pattern)
|
|
||||||
logger.debug(f"Инвалидирован кэш подписок: {cache_key_pattern}")
|
|
||||||
|
|
||||||
# ✅ КРИТИЧНО: Также инвалидируем кеш полных данных для корректной загрузки при рефреше
|
|
||||||
await redis.execute("DEL", f"author:id:{follower_id}")
|
|
||||||
logger.debug(f"Инвалидирован кеш полных данных пользователя: author:id:{follower_id}")
|
|
||||||
|
|
||||||
if get_cached_follows_method and isinstance(follower_id, int):
|
if get_cached_follows_method and isinstance(follower_id, int):
|
||||||
logger.debug("Получение актуального списка подписок из кэша")
|
logger.debug("Получение актуального списка подписок из кэша")
|
||||||
follows = await get_cached_follows_method(follower_id)
|
follows = await get_cached_follows_method(follower_id)
|
||||||
@@ -296,6 +293,11 @@ async def unfollow(
|
|||||||
if what == "AUTHOR" and isinstance(follower_dict, dict):
|
if what == "AUTHOR" and isinstance(follower_dict, dict):
|
||||||
await notify_follower(follower=follower_dict, author_id=entity_id, action="unfollow")
|
await notify_follower(follower=follower_dict, author_id=entity_id, action="unfollow")
|
||||||
|
|
||||||
|
# ✅ КРИТИЧНО: Инвалидируем кеш списка подписчиков автора
|
||||||
|
# чтобы отписавшийся сразу исчез из списка
|
||||||
|
await redis.execute("DEL", f"author:followers:{entity_id}")
|
||||||
|
logger.debug(f"Инвалидирован кеш подписчиков автора после unfollow: author:followers:{entity_id}")
|
||||||
|
|
||||||
# Инвалидируем кеш статистики авторов для обновления счетчиков подписчиков
|
# Инвалидируем кеш статистики авторов для обновления счетчиков подписчиков
|
||||||
logger.debug("Инвалидируем кеш статистики авторов после отписки")
|
logger.debug("Инвалидируем кеш статистики авторов после отписки")
|
||||||
await invalidate_authors_cache(entity_id)
|
await invalidate_authors_cache(entity_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user