gpt4 book ai didi

c# - 使用 ServiceStack.Redis C# .Net 在 Redis 服务器中从第 m 行到第 n 行搜索数据

转载 作者:可可西里 更新时间:2023-11-01 11:12:04 25 4
gpt4 key购买 nike

我的 Redis 服务器在数据键 [urn:Customer] 中有 1000 行客户行。我需要从该记录集中获取分页结果以用于我的自动完成过程。

我的代码:

var custDetails = from C in nwDB.Customers
select new {
C.CustomerID, C.CompanyName,
C.ContactName, C.City,
C.Country, C.PostalCode,
C.Phone, C.Fax
};

using (var redis = new RedisClient())
{
redis.FlushDb();
redis.FlushAll();

var RedisUsers = redis.As<CustomerR>();
RedisUsers.SetSequence(0);

foreach (var eachCustomer in custDetails)
{
RedisUsers.Store(new CustomerR
{
RedisCustID = RedisUsers.GetNextSequence(),
CustomerID = eachCustomer.CustomerID,
CompanyName = eachCustomer.CompanyName,
ContactName = eachCustomer.ContactName,
City = eachCustomer.City,
Country = eachCustomer.PostalCode,
Phone = eachCustomer.Phone,
Fax = eachCustomer.Fax
});
}

var allThepeople = RedisUsers.GetAll();
gvCustomers.DataSource = allThepeople;
gvCustomers.DataBind();
}

我需要使用 RedisUsers.GetNextSequence() 值仅显示前 50 行,而不是 GetAll()

最佳答案

为每个客户使用一个 key

最好将每个客户存储为他们自己的 key 。 urn:Customer:123将代表 CustomerID = 123。

这为我们提供了一个优势,即只需选择该键即可通过客户的 ID 访问客户。但它也让我们能够SCAN与客户 key 模式匹配的 key 。即 urn:Customer:<id> .

您还可以避免创建任意 RedisCustID , 只需使用 CustomerID , 它将避免很多困惑。

存储客户:

var custDetails = from c in nwDB.Customers select new { 
c.CustomerID,
c.CompanyName,
c.ContactName,
c.City,
c.Country,
c.PostalCode,
c.Phone,
c.Fax
};

using (var redis = new RedisClient())
{
var customers = redis.As<CustomerR>();

foreach(var customer in custDetails)
{
// The key for this customer
var customerKey = string.Format("Customer:{0}", customer.CustomerID);

// Store the customer
// Use ConvertTo<T> to auto map the properties
customers.SetEntry(customerKey, customer.ConvertTo<CustomerR>());
}
}

通过 Id 检索客户:

using (var redis = new RedisClient())
{
var customers = redisClient.As<CustomerR>();
var customerKey = string.Format("Customer:{0}", 123);
var customer = customers.GetValue(customerKey);
}

检索所有客户:

using (var redis = new RedisClient())
{
var customerKeys = redis.ScanAllKeys("Customer:*").ToList();
var allCustomers = redis.GetValues<CustomerR>(customerKeys);
}

检索前 50 个客户:

ScanAllKeys方法允许您对结果进行分页,这正是您最终想要做的。

using (var redis = new RedisClient())
{
var customerKeys = redis.ScanAllKeys("Customer:*", 50).ToList();
var top50Customers = redis.GetValues<CustomerR>(customerKeys);
}

检索特定范围内的客户:

即获取尺寸为 10 的第 3 页

int page = 3;
int pageSize = 10;

int startAt = pageSize * page;
int endAt = startAt + pageSize;

using (var redis = new RedisClient())
{
var pagedCustomerKeys = redis.ScanAllKeys("Customer:*", endAt).ToList().Skip(startAt).Take(pageSize);
var pagedCustomers = redis.GetValues<CustomerR>(pagedCustomerKeys);
}

如果您想了解如何更新客户或删除客户 see this answer ,其中提供了更多示例。

希望对您有所帮助。

关于c# - 使用 ServiceStack.Redis C# .Net 在 Redis 服务器中从第 m 行到第 n 行搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com