Redis потоковые ответы LIST - PullRequest
0 голосов
/ 26 сентября 2018

Мы бы хотели получить ответ от Redis в виде потока , похожего на Postgres Streams .

Мы получилиограничение на использование как можно меньше серверной памяти.Некоторые из наших списков могут занимать ~ 10 МБ и запрашивать одновременно у нескольких пользователей.

В этом случае устаревший способ в конечном итоге вызовет проблемы с памятью на наших серверах.

Альтернативным решением является итерация списка и отправка lrange команд, каждая партия возвращает часть элементов списка, но это было бы неэффективно из-за сетевых обращений.

Вот что у меня естьна данный момент, который является стандартным способом ведения дел:

'use strict'

const redis = require('redis'),
    client = redis.createClient()

client.on('error', function (err) {
  console.log('Error ' + err)
})

client.rpush('foo', 1)
client.rpush('foo', 2)
client.rpush('foo', 3)
client.rpush('foo', 4)
client.rpush('foo', 5)

client.lrange('foo', 0, -1, (err, replies) => {
  console.log(replies)
})

1 Ответ

0 голосов
/ 26 сентября 2018

Потоковая передача еще не реализована в Redis, поэтому разбиение на страницы является хорошим подходом.Тем не менее, структура данных List не поддерживает этот шаблон слишком хорошо, так как LRANGE является дорогой (O (N)) операцией.

Я предлагаю рассмотреть альтернативную структуру данных, такую ​​как Sorted Sets или v5 Streams.для хранения ваших данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...