За какво да мислите, когато проектирате NoSQL Redis приложение
1) За да се развивате правилно в Redis, трябва да мислите повече за това как бихте структурирали връзките във вашата C# програма, т.е. с класовете за колекция на C#, а не с релационен модел, предназначен за RDBMS. По-добрият начин на мислене би бил да се мисли повече за съхранение на данни като база данни с документи, а не за RDBMS таблици. По същество всичко се размива в Redis чрез ключ (индекс), така че просто трябва да разберете какви са основните ви обекти (т.е. обобщени корени), които ще се съхраняват в собственото си „ключово пространство от имена“ или дали не е първичен обект, т.е. метаданни, които просто трябва да бъдат запазени с родителския обект.
Примери за Redis като основно хранилище на данни
Ето една добра статия, която минава през създаването на просто приложение за блогове с Redis:
http://www.servicestack.net/docs/redis-client/designing-nosql-database
Можете също да разгледате изходния код на RedisStackOverflow за друг пример от реалния свят, използвайки Redis.
По принцип ще трябва да съхранявате и извличате елементите от всеки тип поотделно.
var redisUsers = redis.As<User>();
var user = redisUsers.GetById(1);
var userIsWatching = redisUsers.GetRelatedEntities<Watching>(user.Id);
Начинът, по който съхранявате връзката между обекти, е използването на наборите на Redis, например:можете да съхранявате концептуално връзката Потребители/Наблюдатели с:
SET["ids:User>Watcher:{UserId}"] = [{watcherId1},{watcherId2},...]
Redis е без схема и идемпотент
Съхраняването на идентификатори в redis набори е идемпотентно, т.е. можете да добавите watcherId1 към един и същ набор няколко пъти и винаги ще има само едно появяване на това. Това е хубаво, защото означава, че никога не е нужно да проверявате съществуването на връзката и можете свободно да добавяте свързани идентификатори, сякаш никога не са съществували.
Свързано:записването или четенето в колекция Redis (например списък), която не съществува, е същото като писането в празна колекция, т.е. списъкът се създава в движение, когато добавите елемент към списък, докато осъществявате достъп до не- съществуващ списък просто ще върне 0 резултата. Това е печалба без триене и производителност, тъй като не е нужно да дефинирате схемите си предварително, за да ги използвате. Въпреки че ако трябва, Redis предоставя операция EXISTS, за да определи дали съществува ключ или операция TYPE, за да можете да определите неговия тип.
Създайте своите връзки/индекси за вашите записи
Едно нещо, което трябва да запомните е, тъй като в Redis няма неявни индекси, обикновено ще трябва да настроите вашите индекси/отношения, необходими за четене по време на вашите записи. По принцип трябва да помислите за всичките си изисквания за заявка предварително и да сте сигурни, че сте настроили необходимите връзки по време на писане. Горният изходен код на RedisStackOverflow е добър пример, който показва това.
Забележка:доставчикът на ServiceStack.Redis C# предполага, че имате уникално поле, наречено Id това е неговият първичен ключ. Можете да го конфигурирате да използва различно поле с ModelConfig.Id() конфигурационно съпоставяне.
Redis Persistance
2) Redis поддържа 2 типа режима на постоянство в комплект с RDB и само прибавяне на файл (AOF). RDB записва рутинни моментни снимки, докато Append Only File действа като дневник на транзакциите, записващ всички промени между моментните снимки - препоръчвам да добавяте и двете, докато не се почувствате добре с това, което прави всеки и от какво се нуждае вашето приложение. Можете да прочетете цялата устойчивост на Redis на http://redis.io/topics/persistence.
Забележка Redis също поддържа тривиална репликация, за която можете да прочетете повече на:http://redis.io/topics/replication
Redis обича RAM
3) Тъй като Redis работи предимно в паметта, най-важният ресурс е, че имате достатъчно RAM, за да задържите целия си набор от данни в паметта + буфер за моментни снимки на диск. Redis е много ефективен, така че дори малък екземпляр на AWS ще може да се справи с много натоварване - това, което искате да търсите, е да имате достатъчно RAM.
Визуализация на вашите данни с потребителския интерфейс на Redis Admin
И накрая, ако използвате ServiceStack C# Redis Client, препоръчвам да инсталирате Redis Admin UI, който осигурява приятен визуален изглед на вашите обекти. Можете да видите демонстрация на живо на:http://servicestack.net/RedisAdminUI/AjaxClient/