LINUX.ORG.RU

ВОПРОС: как в редис добавить в лист ключ

 


0

1

Делаю так

rpush myList '{«id»: «a»}'
rpush myList '{«id»: «b»}'
rpush myList '{«id»: «c»}'

Мне нужно хранить упорядоченный списочек

Потом хочу удалить по id=«a» Но, вопрос, как? Тупо приходит на ум запросить весь список, прогнать через JSON.parse(), найти индекс элемента и удалить через индекс. Но тут очевидно куча проблем.

1) В промежутке моего поиска, может добавиться новый элемент и найденный индекс будет не актуален (удалится другой элемент!).

2) Время на разбор json, 3) Время на загрузку всего списочка

Просмотрел все типы и ничего нужного не нашел. hSet не сортирует.

ЧТО ДЕЛАТЬ БРАТЬЯ?

Пока ждал, нашел LREM - решает задачу на 78% (по моим ощущениям). А вообще я ждал от редиса чего то большего. Вообще можно было бы hash использовать, но он (падла), как то коряво сортирует ключи. Если бы добавлял нормально просто в конец, а то ведь не понятно как ключи сортируются или как в память лягут или что. Недоработки Redis явные, не хватает Sorted Hash

★★★★

Последнее исправление: gobot (всего исправлений: 2)
Ответ на: комментарий от Anoxemian

ЗАД не то, смотрел. Нужно типа Hset, но как List. Насчет блокировок тоже думал, но ничего не нашел, кроме транзакций. Но они не блокируют вроде, просто пачку операций посылают за 1 раз (как я понял)

gobot ★★★★
() автор топика

Не помню из головы какой тип данных используется у меня, но сортирую я на бэке (php). Получаю все записи и сортирую в памяти.

Но у меня мало данных, так что это не проблема для меня.

skyman ★★★★
()
Ответ на: комментарий от anonymous

Да много что есть. И кафки и фигафки. Но используется то, что более менее знаешь, что привычней. Редис использовал пассивно много лет, но так в основном пару ключиков и хранение сессий, все банально. Сейчас же понадобился небольшой БРОКЕР сообщений + хранилище.

gobot ★★★★
() автор топика
Ответ на: комментарий от anonymous

Интересно, почему используют Redis, когда есть Tarantool

Я вот поглядывал на Tarantool. По Redis:

  • есть простая и понятная документация из коробки
  • есть 100500 сторонних туториалов, где всё разжёвано дополнительно со всех сторон

Открываешь доки, что официальные, что нет, по Tarantool. И хватаешься за голову. С чего начинать непонятно. Какая-то своя сложная терминология, какие-то «картриджи», млять, которые уже то ли устарели, то ли наоборот «bleeding edge».

Короче, в отличие от redis, нельзя просто установить и начать пользоваться, нет какого-то простого и ясного входа. Сначала пытаешься прочитать талмуды канцелярита, непонятно к какой версии относящиеся, затем просто забиваешь и возвращаешься к простому и понятному redis.

Chiffchaff
()
Последнее исправление: Chiffchaff (всего исправлений: 1)

Довольно сложно понять, что требуется, но выглядит как:

  1. Либо требуется выбрать другое решение
  2. Либо реализовать эту логику самостоятельно на lua внутри redis (я так делал, для другого случая, и получилось прям очень хорошо)
Chiffchaff
()

Не совсем понял. Ты хочешь hashmap с доступом по ключу но при этом с сохранением порядка записей? В общем случае редис так не умеет. Если там чистые ключ-значение и ты работаешь с числами - можно извернуть через zset. Но в целом самый простой путь это список+мап+lua, редис один хрен однопоточный

upcFrost ★★★★★
()