Valkey 9.0 TTL на поле в hashmap
db redisВ новом Valkey (открытый аналог Redis) версии 9.0 появилась возможность выставлять TTL на конкретное поле в hashmap. Раньше можно было выставлять только на весь ключ, что на практике приводило к неудобным компромиссам: либо все поля одного hash разделяют один TTL, либо приходилось разбивать данные на отдельные ключи, что увеличивало overhead.
Давайте разберем, как этот механизм устроен изнутри. У команды Valkey были несколько вариантов решения:
- secondary hashtable - рядом с каждым hashmap объектом положить еще одну hashmap для полей с TTL. Плюсы: простота, минусы: неэффективное сканирование при поиске истекших полей
- radix tree индекс - быстрый доступ к отсортированным данным, но overhead в 54 байта на поле 🙁
- sorted skip-list - эффективное сканирование истекших полей, но сложность доступа O(log N) вместо ожидаемого для hashmap O(1)
Чтобы понять итоговое решение, нужно разобраться, как Redis/Valkey работает с TTL для ключей. Используются 2 стратегии:
Далее...