簡體   English   中英

使用.NET進行Redis優化,以及如何從Hash存儲和獲取元素的具體示例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM