【发布时间】:2015-05-05 18:16:31
【问题描述】:
我在 MVC 应用程序中使用 redis 缓存。
我想检查redis 缓存是否为空(无数据),然后触发一个网络作业,该作业将从sql 数据库中填充redis 缓存表数据。
如何检查redis缓存中特定表的空数据?
【问题讨论】:
标签: redis redis redis sql caching azure redis azure-sql-database software-distribution
我在 MVC 应用程序中使用 redis 缓存。
我想检查redis 缓存是否为空(无数据),然后触发一个网络作业,该作业将从sql 数据库中填充redis 缓存表数据。
如何检查redis缓存中特定表的空数据?
【问题讨论】:
标签: redis redis redis sql caching azure redis azure-sql-database software-distribution
我将不得不不同意@bitoiu。请勿将 keys 命令作为常规操作运行。 Keys 不打算以这种方式运行 - 它应该仅用于调试操作。
同样,使用 INFO 并不能告诉您是否存在特定数据,而只是告诉您那里有某些东西。如果您在那里只有一个密钥,那么请确保这似乎可以工作 - 直到您发现作业运行出错并存储了一个空字符串或错误的数据。如果您只打算存储一个密钥,可能会有更好的选择。
如果您几乎肯定要存储 SQL 数据库中的数据,那么您将存储的是查询结果,而不是数据的完整副本。这个结果需要一个唯一的键。在 Redis 中对此进行测试的方法是简单地查询键。如果键为空,则填充它。如果是字符串,请使用 get(或存在)。如果是哈希,则查询您需要的特定成员。
这样做的另一个好处是避免让计划的工作执行此操作。而是让数据需要代码首先从 Redis 查询。如果数据在那里,请使用它,否则查询后端并使用结果填充缓存,同时将其传递给客户端。将其与过期时间(如果可能)结合起来,您将获得一种包含活性测试的形式。
这样一来,您就不需要运行更多服务或作业来执行您的应用程序通常会执行的操作。如果您必须更改后端查询代码,您会很高兴有一个且只有一个源可以更改。或者,如果有人更改了一个代码库而不更改另一个代码库。
【讨论】:
keys * 来检查 redis 是否为空,因为我什至没有找到一个用例。我理解你的关键点,但我会保留答案,因为它解决了这个问题。
我将假设redis 缓存只是指redis 并且您将其用作缓存。 redis 是一个内存键值数据存储,它可以用于更多的事情,而不仅仅是缓存。
我要检查redis缓存是否为空(无数据)
你提到了点的数据,也提到了表格。 Redis 没有表,它有键。为了这个问题,我将给出示例,一个用于完全“空”并检查特定键的示例。
检查redis实例是否为空
使用 redis 客户端,如果您运行 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客户端了,这是怎么解决的,代码你自己写吧。
【讨论】:
DBSIZE 或查看# Keyspace 部分下的INFO 命令的输出。
您可以使用命令dbsize,如下所示,这将返回DB中的键数
redis-cli -a PASSWORD -n DB "dbsize" | cut -d ' ' -f 2
【讨论】: