Разные пользователи видят в списке чужие заказы: разбор ключа кэша
Список заказов кэшируется в Redis:
key = "orders:list"
cached = redis.get(key)
if cached:
return json.loads(cached)
data = get_orders(user_id=user.id, status=status)
redis.setex(key, 60, json.dumps(data))
return data
Пользователи жалуются, что в списке появляются чужие заказы и не совпадает выбранный фильтр.
В чём причина?
- Слишком большой TTL: если поставить пять секунд вместо минуты, проблема исчезнет
- Ключ не зависит от параметров выборки: в него должны входить user_id и значения фильтров
- Нужно использовать redis.set вместо setex, а срок жизни задавать отдельной командой
- Данные нельзя хранить строкой JSON: список нужно записывать в структуру типа hash
