如何检查redis缓存table是否为空?

How can I check if redis cache table is empty?

我在 MVC 应用程序中使用 缓存。

我想检查 缓存是否为空(无数据),然后触发网络作业,该作业将填充 缓存 tables 来自 [=19= 的数据]sql 数据库.

如何检查redis缓存中特定table中的空数据?

我假设 by cache you simply mean and you're using it as a cache. 是一个内存中的键值数据存储,它不仅可以用于缓存,还可以用于更多的事情。

I want to check if the redis cache is empty (no data)

您在点和表中提到了数据。 Redis 不是没有表,它有键。为了这个问题,我将给出示例,一个用于完整 "emptiness" 并检查特定密钥。

检查redis实例是否为空

如果您 运行 keys * 使用 redis-client 并且没有得到任何结果,则 redis 实例将为空。

> keys *
(empty list or set)

正在检查是否存在密钥

如果你想检查一个特定的键,你可以简单地 GET 值,或者如果你正在寻找一组命名空间的键,你可以再次使用 keys:

> get com.items.1
(nil)

> keys com.items.*
(empty list or set)

反对如果有价值观你应该得到以下内容:

> get com.items.1
"first item"

> keys com.items.*
1) "com.items.1"
2) "com.items.2"

希望你已经在用redis客户端了,这是解决问题的方法,你得自己写代码了。

我不同意@bitoiu。不要把运行按键命令当作常规操作。 Keys 不应该是 运行 这样的 - 它应该只用于调试操作。

同样,使用 INFO 不会告诉您是否有特定数据,只是告诉您那里有 something。如果您只有一个键,那么可以肯定这似乎有效 - 直到您发现作业 运行 出错并存储了空字符串或错误数据。如果您只打算存储一个密钥,那么可能有更好的选择。

如果您几乎肯定要存储来自 SQL 数据库的数据,您将存储查询结果而不是数据的完整副本。此结果将需要一个唯一的密钥。在 Redis 中对此进行测试的方法是简单地查询键。如果密钥为空,则填充它。如果它是一个字符串使用 get (或存在)。如果它是哈希,则查询您需要的特定成员。

这样做的另一个好处是避免让计划的工作来做。取而代之的是让数据需要代码首先查询来自 Redis。如果数据存在,则使用它,否则查询后端并在将结果传递给客户端时用结果填充缓存。将其与过期(如果可能)结合起来,您将获得一种包含活性测试的形式。

这样您就不需要更多的服务或工作 运行 做您的应用程序通常首先要做的事情。如果您不得不更改后端查询代码,您会感激只有一个来源可以更改。或者如果有人更改了一个代码库而不是另一个。

您可以使用命令 dbsize,如下所示,这将 return 数据库中的键数

redis-cli -a PASSWORD -n DB "dbsize" | cut -d ' ' -f 2