Я реализую структуру данных стека с использованием типов данных списка redis-py и Redis. Я не понимаю, как обрабатывать случай, когда соответствующий тип данных списка пуст. Поведение по умолчанию Redis похоже, что после того, как список пуст, связанный ключ удаляется. Например, случай с пустым списком попадает в Redis, когда я выхожу или очищаю все элементы в структуре данных стека на конце Python. В принципе, моя настройка заключается в том, что у меня есть стек объекта в моем коде, который вызывает операции в списке Redis. Например, когда клиент объекта стека выполняет stack.pop(), объект стека затем вызывает BRPOP в соответствующем списке в Redis, используя redis-py. Кроме того, в моей настройке объект стека имеет ключевой атрибут, который является ключом связанного списка в Redis.Реализовать структуру данных стойких стеков, используя Redis
Я думал о 2 возможных решений до сих пор:
Никогда не опустошить список Redis полностью. По крайней мере, поддерживать один элемент в списке. С точки зрения клиента стек пуст, если список Redis содержит только один элемент. Этот подход работает, но мне он в основном не нравится, поскольку он включает отслеживание количества элементов, нажатых/высколых.
Если список пуст и связанный ключ удален. После последующего нажатия просто создайте новый список в Redis. Этот подход также работает, но сложность здесь заключается в том, что я не могу быть уверен, что кто-то создал k, v pair на Redis, используя тот же ключ, что и мой объект-стек.
Итак, я в основном ищу способ сохранить ключ с пустым списком, который не требует ведения бухгалтерии, требуемой в двух вышеуказанных подходах. Благодарю.
2-е решение наилучшим образом подходит. Я не вижу никаких проблем с этим. Вам не нужно создавать список, просто сделайте Lpush или спешите, он будет создан. Аналогично, если вы получаете (nil) в своем pop, стек пуст и обрабатывает его в логике приложения. Я не понимаю, что вы имели в виду, отслеживая жизнь ключей. Кроме того, redis - это база данных без sql, поэтому вы должны иметь контроль над ключами, которые вы вставляете, вы не можете сказать, что у вас нет контроля над кем-то другим, создающим тот же ключ, что и ваш. –
@ KarthikeyanGopall другие ресурсы онлайн, кажется, что для того, чтобы избежать столкновения с ключами, требуется какое-то соглашение об именах. Контроль над тем, какие ключи идут, - это результат процесса (ручного или автоматизированного), который можно ввести в действие. Кажется, что Redis не дает вам этого объекта, а скорее ему нужно обращаться за пределами Redis. Кроме того, бит жизни ключа отслеживания в моем вопросе был неоднозначным, поэтому я отредактировал. – Waqas