2016-06-26 1 views
1

У меня есть список объектов POCO (~ 80k). Я попробовал разные способы хранения этих объектов в Redis.ServiceStack.Redis: запрашивать подмножество объектов по свойствам объекта, хранящимся с помощью redisClient.StoreAll()

Обратитесь к redisClient.StoreAll() по адресу http://docs.servicestack.net/redis-client/redis-client. Чтобы получить все сохраненные объекты, вы делаете redisClient.GetAll(). Я хотел бы знать, как я могу запросить подмножество объектов на основе критериев.

ответ

0

Непонятно, что вы подразумеваете под запросом, так как данные в Redis обычно получают ключ, а Redis не имеет явной поддержки для запроса значений, которые эффективно непрозрачны для redis.

Я рекомендую прочитать этот предыдущий ответ о том, как вы можете store related objects in Redis using the ServiceStack.Redis client. Это показывает, как использовать индексы для создания связей между типами.

Если вы хотите искать с помощью клавиш вы можете использовать Redis Scan APIs, например:

var userKeyPattern = IdUtils.CreateUrn<User>("*"); //= urn:User:* 
var scanUsers = Redis.ScanAllKeys(userKeyPattern); 
//Stop after retrieving 10000 user keys 
var sampleUsers = scanUsers.Take(10000).ToList(); 

Но вы не можете сделать заказ ADHOC на стороне сервера запросов к Redis значений, если не создать пользовательский LUA скрипт для разбора полезная нагрузка JSON. Вам нужно будет создать пользовательские индексы для всех отношений, которые вы хотите сохранить, иначе вам нужно будет получить результаты на клиенте и запросить их в памяти.

+0

Спасибо за ваше объяснение. Может быть, вы также можете помочь мне объяснить реализацию Service Stack Redis List. Я добавил свои 80k Poco объекты, используя следующий код:. – Afzi

+0

'уаг typedClient = client.As ();' ' typedClient.Lists [ "securityprojections"] AddRange (элементы);' Теперь похоже, что я был в состоянии запросите этот список, используя следующий код: 'var results = typedClient.Lists [" securityprojections "]. Где (w => w.Ticker ==" FTS CN "). ToList();' Прежде всего, это было очень быстро. После проверки ожидаемых результатов оказалось, что было слишком мало строк, вернувшихся, то есть результаты были неправильными. Не могли бы вы объяснить, что происходит за кулисами? – Afzi

+0

@Afzi, пожалуйста, не вводите код в комментарии, если у вас есть новый вопрос, задайте новый вопрос. Вы можете использовать 'typedClient.Lists [" securityprojections "]. GetAll()' для извлечения всех элементов из списка. – mythz