[英]Redis Optimization with .NET, and a concrete example of How to Store and get an element from Hash
我有超過15000個POCO元素存儲在Redis列表中。 我正在使用ServiceStack來保存並獲取它們。 但是,當我將它們放入網格時,我對響應時間不滿意。 正如我所讀,最好將這些對象存儲在哈希中 - 但遺憾的是我找不到任何好的例子來說明我的情況:(
這是我使用的方法,以便將它們放入我的網格中
public IEnumerable<BookingRequestGridViewModel> GetAll()
{
try
{
var redisManager = new RedisManagerPool(Global.RedisConnector);
using (var redis = redisManager.GetClient())
{
var redisEntities = redis.As<BookingRequestModel>();
var result =redisEntities.Lists["BookingRequests"].GetAll().Select(z=> new BookingRequestGridViewModel
{
CreatedDate =z.CreatedDate,
DropOffBranchName =z.DropOffBranch !=null ? z.DropOffBranch.Name : string.Empty,
DropOffDate =z.DropOffDate,
DropOffLocationName = z.DropOffLocation != null ? z.DropOffLocation.Name : string.Empty,
Id =z.Id.Value,
Number =z.Number,
PickupBranchName =z.PickUpBranch !=null ? z.PickUpBranch.Name :string.Empty,
PickUpDate =z.PickUpDate,
PickupLocationName = z.PickUpLocation != null ? z.PickUpLocation.Name : string.Empty
}).OrderBy(z=>z.Id);
return result;
}
}
catch (Exception ex)
{
return null;
}
}
請注意,我使用redisEntities.Lists["BookingRequests"].GetAll()
導致性能問題(我想只使用redisEntities.Lists["BookingRequests"]
但我丟失了網格的最后更新 - 編輯后)
我想知道如果將它們保存到列表中是一個很好的方法,對我而言,擁有一個快速網格非常重要(我現在在分頁時有1秒鍾是巨大的)。
請指教!
首先,每次都不應該像RedisManagerPool
實例那樣創建一個新的Redis Client Manager ,應用程序中只應該有一個RedisManagerPool
的單例實例,可以解析所有客戶端。
但除此之外我會重新考慮您的數據訪問策略,批量下載15K項目並不是一個理想的策略。 您可以通過在集合中存儲ID來創建索引,或者您可以將項目存儲在有序集合中,其值可以像增量ID一樣進行分頁,例如:
var redisEntities = redis.As<BookingRequestModel>();
var bookings = redisEntities.SortedSets["bookings"];
foreach (var item in new BookingRequestModel[0])
{
redisEntities.AddItemToSortedSet(bookings, item, item.Id);
}
這樣你就可以批量獲取它們,例如:
var batch = bookings.GetRangeByLowestScore(fromId, toId, skip, take);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.