如何使用ServiceStack将多个读取命令传递给Redis

使用ServiceStack,是否可以执行多个读取命令(特别是ContainsKey命令)?

存储的对象需要一段时间才能从数据库中获取,因此我们希望仅获取那些不在缓存中的对象。

我知道我可以向redis请求该对象,然后从数据库中获取是否返回null,但是存储的对象相当大,所以我宁愿只获取布尔列表,然后确定要查询的id在数据库中。

目前,我正在遍历我的Ids列表(最多100个左右),并在servicestack中使用ContainsKey方法。我希望避免所有的来回回合,并一口气提出所有要求。

回答:

在ServiceStack.Redis客户端上,您可以使用GetValuesGetValuesMap(字符串和T

api都可用)在单个调用中获取多个值(使用MGET)。仅返回现有项,GetValues如果您的模型上有

GetValuesMap返回现有键及其值的字典,您可以通过它们进行检测。

由此,您可以确定并从数据库中获取所有缺少的ID。如果您无论如何要从Redis获取现有值,那么这是最佳策略,因为您可以通过一次调用获取所有值并确定现有键。

回答:

使用管道或事务

如果出于某种原因您真的只想检查Redis中密钥的存在而不获取它们,那么您可以使用Transaction

/或Pipeline(均已管道化)来排队多个操作,这些操作在1个套接字写入中发送给Redis。这是RedisStackOverflow演示中的一个示例,该示例排队30个操作,这些操作将在单个批处理中发送和执行。

使用LUA脚本

如果Redis>

v2.5x,则可以使用Redis的服务器端LUA支持来创建和执行复合操作。您可以从ServiceStack.Redis客户端中的IRedisClient使用以下API

来执行服务器端LUA脚本:

string GetEvalStr(string body, int numOfArgs, params string[] args);

int GetEvalInt(string body, int numOfArgs, params string[] args);

List<string> GetEvalMultiData(string body, int numOfArgs, params string[] args);

以上是 如何使用ServiceStack将多个读取命令传递给Redis 的全部内容, 来源链接: utcz.com/qa/421551.html

回到顶部