servicestack.redis GetAll()。where()和GetByIds()

时间:2016-08-16 08:44:10

标签: c# .net redis servicestack

我最近使用的是servicestack.redis,我需要IRedisTypedClient的查询。我知道所有数据都在内存中,但仍然想知道,GetAll().Where()GetByIds()之间的速度是否有所不同?

GetAll()GetByIds()是servicestack.redis提供的两种方法。

使用GetAll()可以继续搜索结果(通过lambda),这意味着我可以使用一些自定义条件,但我不知道,是否会从redis内存加载所有数据然后搜索{ {1}},以及搜索速度是否会慢于IEnumable<T>

1 个答案:

答案 0 :(得分:2)

我刚做了一个实验,我存储了100万个对象(ps:有一个服务堆的bug,一次​​只能存储大约50万个对象)。

用这两种方法查询。

DateTime beginDate = DateTime.Now;
Debug.WriteLine("查询1开始");`  
Website site = WebsiteRedis.GetByCondition(w => w.Name == "网址2336677").First();
double time = (DateTime.Now - beginDate).TotalMilliseconds;
Debug.WriteLine("耗时:" + time + "ms");

DateTime beginDate2 = DateTime.Now;
Debug.WriteLine("查询2开始");
Website site2 = WebsiteRedis.GetByID(new Guid("29284415-5de0-4781-bea4-5e01332814b2"));
double time2 = (DateTime.Now - beginDate2).TotalMilliseconds;
Debug.WriteLine("耗时:" + time2 + "ms");

结果是
 GetAll().Where() - 需要19秒,
 GetById() - 需要190毫秒。

我想这是因为servicestack使用对象ID作为redis键,所以永远不要使用GetAll().Where()作为查询,每个对象应与id相关并使用{{1}作为查询。 GetById()应该用于记录较少的对象。