2015-07-07 2 views
0

Мы используем Redis для хранения перетасованных колод карт. Карта представлена ​​20-символьным GUID, а колода представляет собой массив перетасованных идентификаторов GUID. Основные операции, вызываемые в списке Deck, - LLEN (длина) и LPOP (pop). Единственный раз, когда мы нажимаем на колоду: а) когда колода изначально создана, и б) когда колода заканчивается из карт и перетасовывается (что случается редко). В настоящее время длина колоды варьируется от 10 до 700 предметов.Как оптимизировать Redis для хранения списков GUID?

Какую оптимизацию памяти можно сделать в Redis для такого рода проблем? Есть ли какие-либо настройки, которые мы можем настроить для уменьшения издержек памяти или для оптимизации использования типов данных списка (zip)?

Связанные статьи: http://redis.io/topics/memory-optimization

ответ

2

Мое первое предложение было бы использовать 8byte целых чисел без знака в качестве ключа идентификатора вместо GUIDs, что экономит вам несколько байт на запись в памяти, и повышает общую производительность любой базы данных, включая Redis вас используются.

Если вы хотите пойти с guid, и учитывая размер списка и операции, которые вы делаете в списке. Вы можете настроить Redis по умолчанию, чтобы удовлетворить ваши потребности: Redis настройки по умолчанию:

list-max-ziplist-entries 512 
list-max-ziplist-value 64 

Вы можете изменить это:

list-max-ziplist-entries 1024 #to accomodate your 700 cards list 
list-max-ziplist-value 256 # to accomodate your 20 byte guids 

YMMV, следовательно, вы должны эталонными Redis с обоих параметров, для хранения а также производительность чтения/записи с вашими примерными данными.

+0

Спасибо, мы разворачиваем это в ближайшее время! Идти, чтобы оценить также изменения, и посмотреть, сколько у него эффекта. – bluefloyd8

Смежные вопросы