如何使用 Lua 和 Redis 在 C# 中创建高性能计数器

我正在尝试创建一个简单的方法,在我的 Redis 实例中获取键的计数。 在 Redis 中,我有以下键:

mykey:1
mykey:2
mykey:3

通过使用 redis-cli,我可以运行:

eval "return #redis.pcall('keys', 'mykey:*')" 0

它返回:

(integer) 3

因此,我在 C# 中构建了此函数:

public void GetThatCounter()
    {
        var script=LuaScript.Prepare("redis.pcall('keys', 'mykey:*')");
        var result=dbCache.ScriptEvaluate(script);
        Console.WriteLine("result"+result.ToString());
    }

但是,结果包含 "isnull:true",意味着没有结果...

(现在该函数显然不返回任何内容,我只是将其用作测试,并在调试时破坏代码执行,以使用 Visual Studio 编辑器查看结果变量)

有什么帮助吗?

点赞
用户2494091
用户2494091

感谢Aureliar的评论,以下是最终答案:

  • 为了从redis.pcall得到结果,需要在redis.pcall前添加“return”。
  • 为了只获取数组大小,需要在redis.call前添加#。
  • 我也发现,在这种情况下,根本不需要Lua脚本。

所以最终函数看起来像这样:

public int GetCount(string keyWithWildCards) //e.g. key:*
{
 return (int)dbCache.ScriptEvaluate($"return #redis.pcall('keys', '{keyWithWildCards}')");
}

这将避免接收数百万个键:计数将在redis端进行。

在情况下不匹配任何键时,它将返回0。

2021-02-05 16:16:36