当前位置: 首页 > 面试题库 >

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

龙毅
2023-03-14
问题内容

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

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

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

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


问题答案:

在ServiceStack.Redis客户端上,您可以使用GetValuesGetValuesMap(字符串和T
api都可用)在单个调用中获取多个值(使用MGET)。仅返回现有项,GetValues如果您的模型上有
Id,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);


 类似资料:
  • 问题内容: 我想将命令的每个输出作为多个参数传递给第二个命令,例如: 返回: 我想复制这些输出,例如: 我该怎么做呢?就像是: 问题答案: 您可以使用:

  • 问题内容: 如何在Go中将多个外部命令通过管道传递?我已经试过了这段代码,但是看到一条错误消息。 问题答案: StdoutPipe返回一条管道,该管道将在命令启动时连接到命令的标准输出。在Wait看到命令退出后,管道将自动关闭。 (来自http://golang.org/pkg/os/exec/#Cmd.StdinPipe) 您确实关闭了事实。 我做了一个工作示例(只是一个演示,添加了错误捕获功能

  • 问题内容: 好的,希望你们也能帮助我。我对jQuery和AJAX并不了解,也许我错过了一些非常简单的东西。我不能传递多个变量。 jQuery 因此,基本上,如果我运行此程序,它将运行正常,并且我的PHP脚本将对其进行处理。请注意,当我启用警报并显示加载的数据时,它会显示正确的信息(来自的信息),并且能够更新数据库。但是,一旦我添加了另一个变量,它就不会显示在警报框中加载的数据(如果我尝试显示来自两

  • 问题内容: 我需要稍后再运行一个mail.php文件,而不是让用户在提交register.php时等待发送验证电子邮件。 因此,我选择在1分钟后使用 at 命令在命令行中运行mail.php( 在register.php 中 调用 ): 但是,当我处于at命令的交互模式时,我只能将参数发送到该php文件。 由于我希望这是自动的,因此我需要在运行时使用shell脚本: 但是我找不到传递 {email

  • 我使用atom-run(https://github.com/lsegal/atom-runner)运行内联我的nodejs程序。 使用此插件时,是否可以传递命令行参数?点击Alt R启动节点,但由于我的脚本需要参数,它失败了。 在运行之前,如何传递命令行参数?

  • 问题内容: 我有一个属性指令,其限制如下: 我需要传递两个属性;一个数字和一个函数/回调,使用对象在指令中访问它们。 如果指令是元素指令,那么我可以限制为: 但是,出于某种原因,我不再赘述,我需要将该指令作为属性指令。 如何将多个属性传递到属性指令中? 问题答案: 该指令可以访问在同一元素上定义的任何属性,即使该指令本身不是该元素也是如此。 模板: 指示: 如果attribute的值将被硬编码,则