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

时间:2015-03-04 16:37:07

标签: caching azure redis azure-sql-database software-distribution

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

我想检查缓存是否为空(无数据),然后触发一个Web作业,该作业将填充来自数据库的缓存表数据。

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

3 个答案:

答案 0 :(得分:1)

我将不得不同意@bitoiu。不要将keys命令作为例程操作运行。密钥不是以这种方式运行的 - 它应仅用于调试操作。

同样,使用INFO并不会告诉您特定数据是否存在,只是那里有某些。如果你有一个且只有一个密钥,那么确定它似乎可行 - 直到你发现一个作业运行失败并存储一个空字符串或错误的数据。如果您只想存储一个密钥,那么可能有更好的选择。

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

这样做的另一个好处是避免让预定的工作做到这一点。而是从Redis首先查询数据需要代码。如果存在数据,请使用它,否则查询后端并使用结果填充缓存,同时将其传递给客户端。将此与过期(如果可能)相结合,您将获得一种活动测试形式。

通过这种方式,您不需要运行更多服务或作业来执行应用程序通常首先执行的操作。如果您必须更改后端查询代码,您会发现只有一个来源可以更改。或者,如果有人更改了一个代码库而没有更改另一个

答案 1 :(得分:0)

我将假设缓存只是表示并且您将其用作缓存。 是一个内存中的键值数据存储,可用于除缓存之外的更多内容。

  

我想检查redis缓存是否为空(无数据)

您在点上提及数据,但也提到表格。 Redis没有桌子,它有钥匙。为了这个问题,我将给出一些例子,一个用于完全“空虚”并检查一个特定键。

检查redis实例是否为空

使用redis-client如果运行keys *并且没有结果,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客户端,这是如何解决问题的,你必须亲自编写代码。

答案 2 :(得分:0)

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

redis-cli -a PASSWORD -n DB "dbsize" | cut -d ' ' -f 2
相关问题