我在MVC应用程序中使用redis缓存。
我想检查redis缓存是否为空(无数据),然后触发一个Web作业,该作业将填充来自redis数据库的sql缓存表数据。
如何在redis缓存中检查特定表中的空数据?
答案 0 :(得分:1)
我将不得不同意@bitoiu。不要将keys命令作为例程操作运行。密钥不是以这种方式运行的 - 它应仅用于调试操作。
同样,使用INFO并不会告诉您特定数据是否存在,只是那里有某些。如果你有一个且只有一个密钥,那么确定它似乎可行 - 直到你发现一个作业运行失败并存储一个空字符串或错误的数据。如果您只想存储一个密钥,那么可能有更好的选择。
如果您几乎肯定要存储来自SQL DB的数据,那么您将存储查询结果而不是数据的完整副本。这个结果需要一个唯一的密钥。在Redis中测试这个的方法是简单地查询密钥。如果键为空,请填充它。如果是字符串则使用get(或者存在)。如果是哈希,则查询您需要的特定成员。
这样做的另一个好处是避免让预定的工作做到这一点。而是从Redis首先查询数据需要代码。如果存在数据,请使用它,否则查询后端并使用结果填充缓存,同时将其传递给客户端。将此与过期(如果可能)相结合,您将获得一种活动测试形式。
通过这种方式,您不需要运行更多服务或作业来执行应用程序通常首先执行的操作。如果您必须更改后端查询代码,您会发现只有一个来源可以更改。或者,如果有人更改了一个代码库而没有更改另一个
答案 1 :(得分:0)
我将假设redis缓存只是表示redis并且您将其用作缓存。 redis是一个内存中的键值数据存储,可用于除缓存之外的更多内容。
我想检查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