Мисля, че най-добрият съвет е да избягвате да се придържате към релационния модел, когато пренасяте нещо от RDBMS към Redis. И извън модела, важна разлика е да се съсредоточи върху пътищата за достъп до данни, както и върху структурите на данните.
Redis не включва език за заявки (а по-скоро командва a la memcached) и следователно не може да отговаря на произволни заявки. Ако път за достъп до данните не е част от структурата на данните, тогава данните не могат да бъдат ефективно извлечени.
Redis не е най-добрият магазин за NoSQL, когато става въпрос за поддръжка на произволни заявки. Например, по-добре ще бъдете обслужени от нещо като MongoDB.
Сега, ако наистина искате да внедрите вашите неща с Redis, можете да опитате да използвате стратегия, подобна на маркиращите машини. Вашите записи могат да се съхраняват в хеш обекти. За всяка колонна част от произволните заявки, които трябва да поддържате, изграждате обратни индекси с помощта на набори.
Например:
# Set up the records: one hash object per record
hmset user:1 name Bilbo type Hobbit job None
hmset user:2 name Frodo type Hobbit job None
hmset user:3 name Gandalf type Maiar job Wizard
hmset user:4 name Aragorn type Human job King
hmset user:5 name Boromir type Human job Warrior
# Set up the indexes: one set per value per field
sadd name:Bilbo 1
sadd name:Frodo 2
sadd name:Gandalf 3
sadd name:Aragorn 4
sadd name:Boromir 5
sadd type:Hobbit 1 2
sadd type:Maiar 3
sadd type:Human 4 5
sadd job:None 1 2
sadd job:Wizard 3
sadd job:King 4
sadd job:Warrior 5
# Perform a query: we want the humans who happen to be a king
# We just have to calculate the intersection of the corresponding sets
sinterstore tmp type:Human job:King
sort tmp by nosort get user:*->name get user:*->job get user:*->type
1) "Aragorn"
2) "King"
3) "Human"
Чрез комбиниране на обединение, пресичане, разлика могат да се реализират по-сложни заявки. За недискретни стойности или за заявки, базирани на диапазон, трябва да се използват подредени набори (zset) (и могат да се комбинират с нормални набори).
Този метод обикновено е доста бърз, ако стойностите са достатъчно дискриминантни. Моля, имайте предвид, че нямате гъвкавостта на RDBMS (без регулярни изрази, без търсене с префикс, заявките за диапазон са трудност за справяне и т.н. ...)