在ServiceStack.Redis客户端上,您可以使用GetValues
or (字符串和 T api 都可用)在一次调用中GetValuesMap
获取多个值(使用MGET )。仅返回现有项目,GetValues
如果您的模型上有Id或GetValuesMap
返回现有键及其值的字典,您可以检测这些项目。
由此,您可以确定并从数据库中获取所有缺失的 Id。如果您只是要从 Redis 获取现有值,那么这是最佳策略,因为您可以获取所有值并通过 1 次调用确定现有键。
替代“单一呼叫”选项
使用流水线或事务
如果出于某种原因您真的只想检查 Redis 中是否存在键而不获取它们,那么您可以使用事务/或管道(两者都是流水线的)来排队多个操作,这些操作在 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);