В продолжении поста про PostgreSQL, поделюсь про Redis. Чаще всего используют только строку, но он гораздо многообразнее.
🧱 String
— Ключ-значение, базовый кирпич. Кэш, флаги, счётчики, токены.
— Пример:
— Паттерны: rate-limit (`INCR + EXPIRE`), простые распределённые блокировки (`SET lock val NX PX 10000`)
🧩 Hash
— «Объект» с полями: компактно хранит мелкие атрибуты.
— Пример:
— Когда: профили пользователей, настройки. Плюс — частичные обновления полей.
— Нюанс: нет TTL на отдельные поля, ставится на весь ключ.
📚 List
— Упорядоченная коллекция. Очереди (FIFO/LIFO), буферы, журналы.
— Пример:
— Когда: простые очереди, ретраи. Не забывайте
🏷 Set
— Множества без дубликатов. Теги, интересы, подписки.
— Пример:
— Когда: рекомендации по пересечению множеств, дедупликация.
🏆 Sorted Set (ZSet)
— Множество с весом (score). Рейтинги, приоритизация, «календарь по времени».
— Пример:
— Когда: топ-N, очереди с приоритетом, time-index (`score = timestamp`).
— Хитрость: чистка старых данных —
🧮 Bitmap
— Битовые флаги по смещению. Ультра-дешёвая памятью аналитика по дням.
— Примеры
— Когда: «приходил ли пользователь в день D», воронки по дням, календари активности.
📏 Bitfield
— Упакованные счётчики/флаги в одном ключе.
— Пример:
— Когда: компактные счётчики для ограниченного диапазона (экономия памяти).
🔢 HyperLogLog
— Приблизительное количество уникальных (distinct).
— Пример:
— Когда: уникальные посетители/поисковые запросы, где допустима погрешность.
📍 GEO (геоиндексы)
— Геопоиск по радиусу/полигону.
— Пример:
— Когда: «что рядом», ближайшие точки интереса.
📨 Streams
— Лог событий с потребительскими группами (Kafka-лайт).
— Пример:
— Когда: event sourcing, обработка событий с подтверждениями.
📣 Pub/Sub
— Эфемерные сообщения «здесь и сейчас».
— Пример:
— Когда: оповещения в реальном времени, без хранения истории (не путать со Streams).
🧾 RedisJSON (Redis 8+)
— Хранение JSON как дерево, выборка/патчи по путям.
— Пример:
— Когда: нужны частичные обновления и индексирование полей (с RediSearch).
— Альтернатива: String с сериализацией — просто, но без частичных апдейтов.
🧠 Итог
— В Redis выбор структуры = половина решения. Строка с JSON — ок для простого кэша, но для очередей, рейтингов, счётчиков и аналитики есть куда более точные инструменты.
#Redis #БД #Кэширование #Backend #Шпаргалка #DataEngineering
🧱 String
— Ключ-значение, базовый кирпич. Кэш, флаги, счётчики, токены.
— Пример:
SET key val, GET key, INCR views, SETNX, EXPIRE key 60— Паттерны: rate-limit (`INCR + EXPIRE`), простые распределённые блокировки (`SET lock val NX PX 10000`)
🧩 Hash
— «Объект» с полями: компактно хранит мелкие атрибуты.
— Пример:
HSET user:42 name Lev email lev@..., HGETALL user:42— Когда: профили пользователей, настройки. Плюс — частичные обновления полей.
— Нюанс: нет TTL на отдельные поля, ставится на весь ключ.
📚 List
— Упорядоченная коллекция. Очереди (FIFO/LIFO), буферы, журналы.
— Пример:
LPUSH queue job1, BRPOP queue 0— Когда: простые очереди, ретраи. Не забывайте
LTRIM для ограничения длины.🏷 Set
— Множества без дубликатов. Теги, интересы, подписки.
— Пример:
SADD tags:post:1 go devops, SINTER user:42:tags post:1:tags— Когда: рекомендации по пересечению множеств, дедупликация.
🏆 Sorted Set (ZSet)
— Множество с весом (score). Рейтинги, приоритизация, «календарь по времени».
— Пример:
ZADD leaderboard 1500 user42, ZRANGE leaderboard 0 9 WITHSCORES— Когда: топ-N, очереди с приоритетом, time-index (`score = timestamp`).
— Хитрость: чистка старых данных —
ZREMRANGEBYSCORE.🧮 Bitmap
— Битовые флаги по смещению. Ультра-дешёвая памятью аналитика по дням.
— Примеры
SETBIT active:2025-09-10 42 1, BITCOUNT active:*— Когда: «приходил ли пользователь в день D», воронки по дням, календари активности.
📏 Bitfield
— Упакованные счётчики/флаги в одном ключе.
— Пример:
BITFIELD key INCRBY u8 10 1— Когда: компактные счётчики для ограниченного диапазона (экономия памяти).
🔢 HyperLogLog
— Приблизительное количество уникальных (distinct).
— Пример:
PFADD u:visits user42, PFCOUNT u:visits— Когда: уникальные посетители/поисковые запросы, где допустима погрешность.
📍 GEO (геоиндексы)
— Геопоиск по радиусу/полигону.
— Пример:
GEOADD places 13.405 52.52 berlin, GEOSEARCH places FROMLONLAT 13.4 52.5 BYRADIUS 5 km— Когда: «что рядом», ближайшие точки интереса.
📨 Streams
— Лог событий с потребительскими группами (Kafka-лайт).
— Пример:
XADD events * type=signup user=42, XREADGROUP GROUP g c COUNT 10 STREAMS events >— Когда: event sourcing, обработка событий с подтверждениями.
📣 Pub/Sub
— Эфемерные сообщения «здесь и сейчас».
— Пример:
PUBLISH chan msg, SUBSCRIBE chan— Когда: оповещения в реальном времени, без хранения истории (не путать со Streams).
🧾 RedisJSON (Redis 8+)
— Хранение JSON как дерево, выборка/патчи по путям.
— Пример:
JSON.SET user:42 $ '{"name":"Lev","age":33}', JSON.NUMINCRBY user:42 $.age 1— Когда: нужны частичные обновления и индексирование полей (с RediSearch).
— Альтернатива: String с сериализацией — просто, но без частичных апдейтов.
🧠 Итог
— В Redis выбор структуры = половина решения. Строка с JSON — ок для простого кэша, но для очередей, рейтингов, счётчиков и аналитики есть куда более точные инструменты.
#Redis #БД #Кэширование #Backend #Шпаргалка #DataEngineering
❤6👍5🔥2❤🔥1
Нашел прям лучший подход по видению ToDo.
То есть не просто пишешь, а потом в IDE контролируешь, а сразу завешиваешь задачу. Прям гениально и просто.
P. S. Понятно что все равно не гарантия исправления.
# TODO(DEV-12346): Надо поправить конфиг
То есть не просто пишешь, а потом в IDE контролируешь, а сразу завешиваешь задачу. Прям гениально и просто.
P. S. Понятно что все равно не гарантия исправления.
👍3🔥1
Бодрый кодер
Который раз убеждаюсь — профессия разработчика не даёт заскучать. Каждый день узнаёшь что-то новое. Недавно со мной поделились интересной находкой: оказывается, в Nginx Ingress есть встроенная поддержка телеметрии. Можно буквально «из коробки» настроить отправку…
Всех причастных с профессиональным праздником, днём программиста!
Спустя неделю, пишу другу, говорю «Зацени какая фича есть», это я так с оф.доки Nginx ingress вылез, изучая что еще упустил. А он мне скидывает наш диалог, где как раз об этом рассказал, после чего я сделал пост.
И тут я понял, что рабочая неделя была напряжённой.
Спустя неделю, пишу другу, говорю «Зацени какая фича есть», это я так с оф.доки Nginx ingress вылез, изучая что еще упустил. А он мне скидывает наш диалог, где как раз об этом рассказал, после чего я сделал пост.
И тут я понял, что рабочая неделя была напряжённой.
😁7❤5
PostgreSQL 18 уже почти на подходе, и одна из самых приятных новинок для разработчиков — нативная поддержка UUIDv7.
Если раньше gen_random_uuid() выдавал только UUIDv4 (UUIDv4 генерируются случайно, поэтому новые записи вставляются в разные места B-tree индекса. Это вызывает фрагментацию, рост размера индекса и замедление операций), то теперь у нас появляется функция uuidv7(). Она генерирует идентификаторы, упорядоченные по времени, что решает старую боль с раздутием B-tree индексов (новые ключи ложатся в «хвост» индекса, как автоинкремент, и поэтому работают быстрее).
Теперь IDшники не только уникальны, но и красиво сортируются по времени создания 👌
Для распределённых систем и масштабных БД — прямо must-have.
#postgresql #uuid #uuidv7 #базыданных
Если раньше gen_random_uuid() выдавал только UUIDv4 (UUIDv4 генерируются случайно, поэтому новые записи вставляются в разные места B-tree индекса. Это вызывает фрагментацию, рост размера индекса и замедление операций), то теперь у нас появляется функция uuidv7(). Она генерирует идентификаторы, упорядоченные по времени, что решает старую боль с раздутием B-tree индексов (новые ключи ложатся в «хвост» индекса, как автоинкремент, и поэтому работают быстрее).
CREATE TABLE test (
id uuid DEFAULT uuidv7() PRIMARY KEY,
name text
);
INSERT INTO test (name) VALUES ('foo'), ('bar');
SELECT uuid_extract_timestamp(id), name FROM test ORDER BY id;
Теперь IDшники не только уникальны, но и красиво сортируются по времени создания 👌
Для распределённых систем и масштабных БД — прямо must-have.
#postgresql #uuid #uuidv7 #базыданных
🔥6👍2
Вчера ездил на экскурсию в ЦОД Яндекс, во Владимир. Получилось классно.
Инженерные решения конечно потрясающее. Особенно собственные стойки и решения по юнитам.
Ну и конечно посмотрели сердце одного из суперкомпьютеров, на котором в том числе обучают Алису.
Инженерные решения конечно потрясающее. Особенно собственные стойки и решения по юнитам.
Ну и конечно посмотрели сердце одного из суперкомпьютеров, на котором в том числе обучают Алису.
👍11🔥5❤3😍1
Бодрый кодер
PostgreSQL 18 уже почти на подходе, и одна из самых приятных новинок для разработчиков — нативная поддержка UUIDv7. Если раньше gen_random_uuid() выдавал только UUIDv4 (UUIDv4 генерируются случайно, поэтому новые записи вставляются в разные места B-tree индекса.…
Мой подписчик написал комментарий, который тянет на пост:
если бизнес логика у тебя полагается на монотонное возрастание uuidv7 (например дедубликация), а у тебя отсортировано не в том порядке — не самое приятное событие...
uuidv7 "ориентированный по времени" а не "транзакционно ориентированный"
тоесть у тебя может быть кейс когда транзакция с более поздним uuid закомитится раньше чем транзакция с более ранним uuid.
а раз раньше закомитилась — раньше вернула поток управления коду. и связанные записи (например релейшены) получают другой ордер (если это важно).
+ точность ордера ограничена 1 миллисекундой. если прилетело 5 запросов в одну миллисекунду — нет способа зарезолвить порядок. это кстати касается и бэкенда если что... но (!) при смене мастера — если часы рассинхронизированы больше чем на 1 миллисекунду возможны уже скачки во времени.
если у тебя реплики в разных датацентрах - скорее всего рассинхрон порядка 10-100мс, и значит точно будет прыгать.
что собственно не защищает и бэк, находящийся на разных инстансах за балансиром...
это не то что бы минусы uuid7, просто ограничение модели, но о них важно помнить, если не хочется гулять по граблям)
🔥2👏1
Вместо #пятничныйюмор . Так выглядит 42 года прогресса.
Мне правда еще не разу не удавалось держать стол таким девственно чистым.
Мне правда еще не разу не удавалось держать стол таким девственно чистым.
👍4💯2❤1
Понедельник начинается с хороших новостей - мой доклад про GitOps для аналитиков взяли на Analyst Days.
В этом осенне-зимнем сезоне будет всего одно выступление, ну может два.
#anystdays #доклады #выступление
В этом осенне-зимнем сезоне будет всего одно выступление, ну может два.
#anystdays #доклады #выступление
🔥15❤3
Всех с предстоящими выходными, а меня с предстоящими рабочими. Еду в Красноярск на неделю, в командировку.
#пятничныйюмор
#пятничныйюмор
🔥13😁4
Лекс Фридман записал большой подкаст с Павлом Дуровым. За четыре часа беседы основатель Telegram поделился подробностями о работе компании и собственными взглядами на разработку.
Очень много про процессы разработки, но теперь надо как-то найти время послушать - даже на x2 это 2часа :(
https://youtu.be/qjPH9njnaVU?si=vOBG2tXbIbBKF6f8
Очень много про процессы разработки, но теперь надо как-то найти время послушать - даже на x2 это 2часа :(
https://youtu.be/qjPH9njnaVU?si=vOBG2tXbIbBKF6f8
YouTube
Pavel Durov: Telegram, Freedom, Censorship, Money, Power & Human Nature | Lex Fridman Podcast #482
Pavel Durov is the founder and CEO of Telegram.
Thank you for listening ❤ Check out our sponsors: https://lexfridman.com/sponsors/ep482-sb
See below for timestamps, trannoscript, and to give feedback, submit questions, contact Lex, etc.
*Trannoscript:*
http…
Thank you for listening ❤ Check out our sponsors: https://lexfridman.com/sponsors/ep482-sb
See below for timestamps, trannoscript, and to give feedback, submit questions, contact Lex, etc.
*Trannoscript:*
http…
Forwarded from Илья ILIYM
В Южной Корее НАМЕРТВО остановилась работа всего государства — из-за одного пожара в датацентре уже неделю не работает практически ничего.
Огонь накрыл сервера Национальной службы Информационных Ресурсов (NIRS): там хостились все государственные сервисы, базы данных и облачные системы.
Всего в очищающем пламени пали 647 государственных сервисов, из них 96 уничтожены полностью. Сгорели:
— Местные госуслуги;
— Система удостоверения личности;
— Государственное облако хранения документов — миллионы записей утеряны безвозвратно;
— Государственная почта;
— Образовательные базы университетов;
— Финансовые и административные сервисы.
858 терабайт данных сгорели вместе с бэкапами — они хранились на сервере в соседней комнате.
Предварительно: причина пожара — возгорание литий-ионной батареи во время её замены.
Чиновник, которого заставили всё чинить, оценил масштаб работ и... покончил жизнь самоубийством.
Огонь накрыл сервера Национальной службы Информационных Ресурсов (NIRS): там хостились все государственные сервисы, базы данных и облачные системы.
Всего в очищающем пламени пали 647 государственных сервисов, из них 96 уничтожены полностью. Сгорели:
— Местные госуслуги;
— Система удостоверения личности;
— Государственное облако хранения документов — миллионы записей утеряны безвозвратно;
— Государственная почта;
— Образовательные базы университетов;
— Финансовые и административные сервисы.
858 терабайт данных сгорели вместе с бэкапами — они хранились на сервере в соседней комнате.
Предварительно: причина пожара — возгорание литий-ионной батареи во время её замены.
Чиновник, которого заставили всё чинить, оценил масштаб работ и... покончил жизнь самоубийством.
😨3❤1🔥1
💬 Собеседование — это не экзамен, а разговор двух взрослых людей
Сколько раз бывало — приходишь на интервью, а чувствуешь себя как школьник у доски.
А ведь на самом деле собеседование — это не только момент, когда смотрят на тебя,
но и твой шанс понять, где, с кем и как ты будешь жить следующие пару лет.
Я для себя давно выработал набор вопросов, которые помогают быстро почувствовать,
живая там среда или очередной “корпоративный зоопарк”.
Вот мои основные 👇
⚙️ Про техническую свободу
• Как принимаются архитектурные решения: через pull request или через комитет?
• Может ли команда выбирать стек и инструменты?
• Кто деплоит в прод: команда или выделенные админы?
🧭 Про процессы и ответственность
• Как формируется roadmap — команда участвует или всё спускается сверху?
• Что происходит, если команда не успевает к сроку?
• Есть ли ретро, и меняется ли после них что-то на самом деле?
🤝 Про культуру и атмосферу
• Можно ли спорить с архитектором или руководителем?
• Что у вас происходит, когда кто-то ошибается?
• Как вы относитесь к инициативам “вне задач”?
🧍♂️ Про своё место в экосистеме
• Где проходит граница ответственности роли?
• Как строится взаимодействие между твоим отделом и остальными?
• Можно ли влиять на процессы — CI/CD, код-ревью, документацию?
Каждый из этих вопросов — не формальность.
По ответу (и по интонации!) сразу видно: перед тобой открытая команда или бюрократическая матрица.
А вы что спрашиваете на собеседованиях?
Какие вопросы помогают вам понять, стоит ли туда идти? 👇
Сколько раз бывало — приходишь на интервью, а чувствуешь себя как школьник у доски.
А ведь на самом деле собеседование — это не только момент, когда смотрят на тебя,
но и твой шанс понять, где, с кем и как ты будешь жить следующие пару лет.
Я для себя давно выработал набор вопросов, которые помогают быстро почувствовать,
живая там среда или очередной “корпоративный зоопарк”.
Вот мои основные 👇
⚙️ Про техническую свободу
• Как принимаются архитектурные решения: через pull request или через комитет?
• Может ли команда выбирать стек и инструменты?
• Кто деплоит в прод: команда или выделенные админы?
🧭 Про процессы и ответственность
• Как формируется roadmap — команда участвует или всё спускается сверху?
• Что происходит, если команда не успевает к сроку?
• Есть ли ретро, и меняется ли после них что-то на самом деле?
🤝 Про культуру и атмосферу
• Можно ли спорить с архитектором или руководителем?
• Что у вас происходит, когда кто-то ошибается?
• Как вы относитесь к инициативам “вне задач”?
🧍♂️ Про своё место в экосистеме
• Где проходит граница ответственности роли?
• Как строится взаимодействие между твоим отделом и остальными?
• Можно ли влиять на процессы — CI/CD, код-ревью, документацию?
Каждый из этих вопросов — не формальность.
По ответу (и по интонации!) сразу видно: перед тобой открытая команда или бюрократическая матрица.
А вы что спрашиваете на собеседованиях?
Какие вопросы помогают вам понять, стоит ли туда идти? 👇
👍10🔥8❤1
Я обожаю подобные утилиты - маленькие, изящные и главное эффективные. Закрывают реальную потребность.
Эта утилита закрывает историю с квотами в Яндекс облаке и finOps.
https://habr.com/ru/articles/955382/
Эта утилита закрывает историю с квотами в Яндекс облаке и finOps.
https://habr.com/ru/articles/955382/
Хабр
YCqouter — считаем деньги и контролируем лейблы
В начале лета я опубликовал статью Маленькая утилита для контроля квот в Yandex Cloud и планировал добавить помимо контроля за квотами еще и подсчет стоимости добавляемых ресурсов. Вот наконец дошли...
Для поста слишком много текста, поэтому опубликовал новость на Хабре.
Для меня это наверное самая любимая CMS. Как с точки зрения разработчика, так и с точки зрения пользователя. Благодаря ей, до сих пор работает (но уже не развивается) семейный блог - https://nemirovblog.ru. Из известного, например Y Combinator и еще как минимум двадцадка крупных медиа изданий и тысячи более мелких.
https://habr.com/ru/news/956572/
Для меня это наверное самая любимая CMS. Как с точки зрения разработчика, так и с точки зрения пользователя. Благодаря ей, до сих пор работает (но уже не развивается) семейный блог - https://nemirovblog.ru. Из известного, например Y Combinator и еще как минимум двадцадка крупных медиа изданий и тысячи более мелких.
https://habr.com/ru/news/956572/
Львиный блог - семейный блог о путешествиях
Мы Лена и Лев Немировские. Это наш дневник. И нам есть, что рассказать миру.
Мы много путешествуем и любим мотоциклы. Жили долгое время в Китае. Этот блог подарок Льва мне. Итак, начинаем...
Мы много путешествуем и любим мотоциклы. Жили долгое время в Китае. Этот блог подарок Льва мне. Итак, начинаем...
👍2🔥1