Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Эта статья короткая, но информативная оredis
изzset
. Позвольте мне поделиться некоторыми онлайн-данными, с которыми я столкнулся, которые могут быть полезны для принятия вами решений.
redis
поддерживает структуру данных, называемуюzset
, который представляет собой упорядоченный список. Конечно, Redis нельзя злоупотреблять, вы можете увидеть мою предыдущую статью со спецификацией:«Вероятно, это наиболее подходящая спецификация Redis».
Студенты, которые забыли, что такое zset, могут посмотреть на эту гифку.
Через него могут быть реализованы такие функции, как игровые таблицы лидеров, илиTopx
Этот вид спроса также может точно позволить пользователям найти свою собственную позицию в массиве данных.
Базовая структура zset — это таблица переходов, а аналогичный упорядоченный набор в Java — этоTreeSet
, реализованный с помощью красно-черного дерева.
В параллельном пакете также есть класс с именемConcurrentSkipListMap
, как видно из его названия, он также реализован с таблицей переходов, которая больше всего похожа на zset.
Ну, это предпосылка. Я также задаю тот же вопрос во время широких интервью.
Наш вопрос: сколько записей может храниться в zset? Есть ли убедительные данные в сети?
Сначала дайте общий ответ, zset理论上
Поддерживаемые элементы не более2^32-1
Один, около 4,2 миллиарда, если у вас достаточно памяти, этого более чем достаточно, чтобы проставить китайцев.
использоватьredis-benchmark
Тестировать этот эффект не очень надежно, а писать тестовые примеры трудоемче. После теста вы можете не поверить, так что пусть онлайн-трафик поразит вас.
Чтобы удовлетворить потребности продукта, я разделил пользователей по провинциям и городам (геохеш), в результате в провинции Гуандун самое большое распределение пользователей, что очень хорошо.
в провинции Гуандунzset
В нем хранится около 60 миллионов данных, и нам нужно подсчитать рейтинг каждого из этих 60 миллионов. Ряд операций, таких как zcard и zrank, легко реализовать.
Побегав какое-то время, память взлетела прямо на8G
о. Это вызвано особой структурой таблицы переходов, и дополнительная вспомогательная информация будет занимать больше памяти.
Вот очки опыта:
- Максимальный объем записи TPS
1k/秒
. - Максимальный объем запросов в секунду в то же время
5k/秒
. - среднее время
5ms
о. - процентов
95
запросы10ms
вернуться внутрь. - Длинные запросы превышают
100ms
не более чем100
полоска.
Другими словами, при сохранении большого количества операций записи и запросов zset может гарантировать низкое время отклика.
Сколько бы вы ни хотели сказать, я не знаю Глядя на эти данные, может быть, я смогу получить еще одно повышение. Но чтобы сделать сервис максимально стабильным и максимально разогнать давление, он не должен быть слишком жестким, меня очень устраивают эти данные.
Это данные только по одной провинции. В сочетании бизнес верхнего уровня должен нести запрос 10w/s. Это очень просто, но в этом нет смысла. Многие приложения с высокой степенью параллелизма разрушаются подобным образом. Хотите изменить свое резюме?
Высокий параллелизм сложного бизнеса ценен, запрос 10w/s, просто дайте мне два Redis, не нужно дуть.
Но я также был потрясен производительностью zset. Я также понимаю структуру таблицы пропуска, но я не ожидал, что она будет такой быстрой в сценарии с высоким параллелизмом и большим объемом данных.
Тестовые данные? нет. Эта статья предназначена только для того, чтобы поделиться ценностью опыта. Кстати, Redis почти не занимает CPU, нужен только сервер 2core16gb.
Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.