我最近使用的是servicestack.redis,我需要IRedisTypedClient
的查询。我知道所有数据都在内存中,但仍然想知道,GetAll().Where()
和GetByIds()
之间的速度是否有所不同?
GetAll()
和GetByIds()
是servicestack.redis提供的两种方法。
使用GetAll()
可以继续搜索结果(通过lambda),这意味着我可以使用一些自定义条件,但我不知道,是否会从redis内存加载所有数据然后搜索{ {1}},以及搜索速度是否会慢于IEnumable<T>
。
答案 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()
应该用于记录较少的对象。