在本视频中,我们将向您展示如何使用 SQL 查询进行搜索 NCache 在您的 .NET 应用程序中。那么,让我们直接开始吧。
现在, NCache 提供了许多功能来从缓存中检索数据,其中一项功能称为 SQL 搜索或 NCache 查询功能。使用此功能 NCache 您能够在缓存上执行基于条件或基于属性的搜索,并且具有高性能。
现在, NCache 具有高度的可扩展性,因此与后端数据库不同,后端数据库在负载增加时就会受到阻塞。 NCache 拥有多个缓存服务器来分配负载并提供高性能。因此,为了让您大致了解 NCache 查询功能,这将为您提供易用性。因此, NCache 具有类似 SQL 的查询语法。因此开发人员可以非常轻松地编写和执行查询。
除此之外,此功能非常容易配置。我将向您展示所有可以做到这一点的方法。然后 NCache 提供多种选项来执行标准基础搜索。
如果要说使用此功能的好处,第一个好处显然是您将获得高性能,因为您访问的是内存数据,而不是基于磁盘的后端数据库。然后,您拥有多个缓存服务器,以确保增强的搜索可扩展性和并行查询执行。这里的关键好处是 NCache 对索引数据执行搜索。因此,这将确保您的应用程序获得闪电般的速度,因为您也可以以闪电般的速度访问数据。
我们通常建议将此功能用于数据不经常更改的参考数据用例。如果您的数据非常庞大,并且您的仪表板需要一些条件来搜索数据,那么此功能非常适合这些场景。您必须确保缓存完整的数据,完整的数据存储在缓存中,这样您就不会根据某些查询获得任何部分结果。
那么,让我们来谈谈如何在您的应用程序中实现此功能。在实现步骤中的环境设置中,首先当然您必须确保 NCache 已安装并配置。因此,如果我向您展示我已将此缓存配置为“ReferenceCache”,托管在两个节点 101 和 102 上。
我们有一个单独的 视频 您也可以在此处进行配置。然后,如果我返回,这是我们将用于此测试的控制台应用程序。这些是我们将要使用的一些方法,以及一些用于基于条件的搜索的模型类。因此,我将在这里重点关注客户的订单和产品。
现在,第一步是安装 NCache 在您的应用程序中安装企业级 NuGet 包。所以,让我们打开 NuGet 包管理器,然后在这里搜索“simple”。 NCache。现在,你将看到 Alachisoft.NCache.SDK。这是 NuGet 包,企业 NuGet 包。我已经将它安装在我这里的两个项目中,正如您在此处看到的。那么,我们现在回去吧。
在第二步中,我们将包括 NCache 应用程序中的命名空间。因此,我将继续在此处输入 Alachisoft.NCache.客户,我们开始吧。然后我也要在其中一个类上这样做。我将解释我们如何以及为什么这样做。所以, NCache.Runtime.Caching。好了,完美。现在让我们回去。
第三步是配置查询索引,如您在此处所见。因此, NCache 为您提供了三种实现方式。第一种方式是编程方式。因此,您可以在代码中包含查询可索引标签。您有 NCache PowerShell 命令行工具。然后,您有管理中心 - 用于此的 GUI 工具。
程序化方法
那么,让我们从第一种方法开始,正如您所见,这里是编程方法。那么,让我们回过头来。我将转到我们添加了程序集引用的 Orders 类,然后继续在此处键入 [QueryIndexable]。
现在,这意味着完整的属性(如您在此处所见)已编入索引,并且您可以针对所有这些属性执行基于条件的搜索。让我们回过头来。
使用命令行工具
第二个选项是使用命令行工具。因此,我将在这里使用 PowerShell。让我把它带到这里,就这样。我已经复制了一个命令,我将把它粘贴到这里,就这样。因此,这个命令叫做 添加查询索引 命令如下。
首先,您要指定 -CacheName,在我们的例子中是 referenceCache。类库所在的 AssemblyPath。具有要执行查询索引、索引的属性的类的名称,然后是要查询索引的属性以及要执行这些配置的服务器。
我只需继续并在此处按下 Enter 键,这将自动在两个节点上配置查询索引,正如您在此处看到的。
NCache 管理中心
让我们最小化,然后我们继续第三个选项,即使用 NCache 管理中心。那么,让我们回过头来。我要刷新这个缓存,以便它获取最新的配置,然后进入“查看详细信息”,向下滚动一点,在高级设置部分,我们有查询索引选项。而且,正如您所看到的,产品类别已经添加,这就是我们使用命令行工具添加的,您可以在这里看到。
单击添加按钮,单击浏览,您将转到类库所在的位置。这是我的案例中的位置。让我搜索模型类,我们开始吧。让我打开它,展开它,再次展开它,这次让我们选择客户。因此,单击添加选定类。再次,您可以选择要执行基于条件的搜索的属性。对于此视频,我将仅选择完整的属性,但是,假设您要对其执行搜索的一两个属性,您也可以选择这些属性。让我们单击确定,然后在查看此视频后单击保存更改,是的,我们开始了。一切看起来都很完美。
好的,让我们回到主页并启动缓存。顺便说一下,我在这里向您展示的所有这些选项都已在我们的文档中提供。所以,我们有这个 配置查询索引 完整的文档可用。因此,它为您提供了管理中心,然后提供了命令行工具选项来执行此操作。让我们回去。缓存已准备就绪。现在让我们继续使用应用程序。
因此,这是第四步,我们在应用程序中实现 SQL 查询命令。所以,让我们回过头来。现在,这是应用程序,正如您在此处看到的,首先我们将转到已初始化的缓存。这也将启动与缓存的连接。因此,首先,我们从 App.config 文件中获取缓存名称,如您在此处看到的。
这是缓存值,是我们视频的引用缓存。我们回过头来。它只是调用 GetCache API 来获取缓存句柄。我们再回过头来。然后它还会在缓存中添加一些数据。
现在,为了实现 SQL 查询 NCache 为您提供某些 API 来执行查询或基于条件的搜索。第一个 API 是 ExecuteReader。您可以在应用程序中使用 ExecuteReader 搜索数据。我现在可以向您展示如何做到这一点。让我们进入这里的第一种方法。首先,您将提供查询字符串。现在,这个字符串将是一个简单的 SQL 查询,例如您通常用于数据库的查询。然后,这个字符串查询提供给查询命令 API NCache。 所以, NCache 会将此字符串转换为查询命令,然后如您所见,此查询命令将提供给 ExecuteReader API。因此, NCache 有 SearchService.ExecuteReader API,您将在那里提供此查询命令。
//region ExecuteReader
private static void QueryAll()
{
try
{
var query = "SELECT * FROM Model_Classes.Orders";
var querycommand = new QueryCommand(query);
ICacheReader reader = _cache.SearchService.ExecuteReader(querycommand, true);
PrintData<Orders>(reader);
var query1 = "SELECT * FROM Model_Classes.Product WHERE ProductID > ? AND UnitPrice < ?";
var querycommand1 = new QueryCommand(query1);
querycommand1.Parameters.Add("ProductID", 20);
querycommand1.Parameters.Add("UnitPrice", (decimal)70);
ICacheReader reader1 = _cache.SearchService.ExecuteReader(querycommand1, true);
PrintData<Product<(reader1);
}
catch (Exception)
{
throw;
}
}
现在让我们进入这个 ExecuteReader。这些是 NCache 提供执行读取器。因此,首先我们有查询命令,然后我们有 getData。现在,它默认设置为 true,但顾名思义,它的作用是,如果 getData 设置为 true, NCache 不仅会提供密钥,还会为您的应用程序提供完整的对象。因此,假设您想获取密钥和值,则可以使用 get data true,您可以保持原样。但是,假设您只想根据某些条件使用密钥,您可以将其设置为 false, NCache 只会给你密钥,你可以相应地执行任何操作。然后,我们这里有一个块大小,如你所见。它只会给你,你可以以字节为单位配置它, NCache 将根据块大小分批检索数据。
ICacheReader ExecuteReader(QueryCommand queryCommand, bool getData = true, int chunkSize = -1);
现在,让我们谈谈 NCache 查询语法或者什么样的运算符 NCache 支持。所以,正如你所看到的,你可以选择全部,我们有一些预测。你可以在这里选择一些列。如果我向下滚动 NCache 也支持类似查询。假设我想搜索一些客户,其中国家/地区例如美国,正如您在此处看到的。您也可以这样做。如果您有任何与此相关的用例,我们也有操作员支持。 NCache 还支持分组。所以,假设,正如您所见,我们在这里选择了一些最小-最大。然后,假设,如果您想对某些内容进行排序,如果我向下滚动,我们就可以了,假设,如果您想对正在从缓存中重试的某些检索项目进行排序 NCache 也支持这一点。因此,无论 NCache, NCache 会帮您排序,然后将其返回给应用程序。因此,您可以根据这些查询执行此操作。
那么,让我们继续,让我向下滚动一点并运行应用程序,就这样。现在让我们打开监视器。是的,客户端已连接,一切看起来都很好。所以我们有一些请求初始化,请求进来,项目已添加到缓存中。让我们返回并按 Enter。就这样。所以,您看到的所有这些结果都是基于我们刚刚提供的基于条件的搜索。因此,您可以在后台看到,在监视器中,我们有一些请求进来,一些延迟项目,每秒增加的数量。所以,所有这些都很好。您可以在这里查看。所以,一切都按我们的预期进行。所以,这一切都是关于 NCache 在这里执行阅读器。
现在我们来谈谈第二个 API NCache provide 是执行标量。假设,如果你想根据任何条件获取单个值 NCache 也支持这一点。所以,如果我回到应用程序,让我把这些方法注释掉,我们不再需要它们了,这个方法也一样,然后让我们取消注释这个,是的。让我们进入这个方法。
//region ExecuteScalar
private static void QueryAverage()
{
try
{
string query = "SELECT AVG(UnitPrice) FROM Model_Classes.Product WHERE UnitsInStock > ?";
// Use QueryCommand for query execution
var queryCommand = new QueryCommand(query);
queryCommand.Parameters.Add("UnitsInStock", 100);
// Executing QueryCommand through ICacheReader
decimal average = (decimal)_cache.SearchService.ExecuteScalar(queryCommand);
Console.WriteLine($"Average price is {average}.");
}
catch (Exception)
{
throw;
}
}
同样,一切都完全相同。您可以指定查询字符串,在我们的例子中,我们只是根据某些标准选择单价的平均值,然后将其提供给查询命令,然后将该查询命令发送到执行标量。如果我进入这个 API,您会发现这里只有一个参数需要使用。
object ExecuteScalar(QueryCommand queryCommand);
让我们返回并再次返回,然后运行应用程序,这样就完成了。我认为客户端已连接,是的。现在让我们按 Enter 键。这样就完成了。因此,我们在后台监视器的每秒请求部分中收到一个请求,您可以看到平均价格,正如您所见,这里也显示出来。所以,一切都很好。让我们关闭它。
假设您有一个需要执行标量用例,您当然也可以查看这一点。现在让我实际评论一下。
现在,让我们继续讨论第三个 API,即执行非查询。假设,如果您想根据任何条件删除一些数据 NCache 对此的支持。因此,我们有 Execute Non Query,如果您想实现它,您可以转到 API,让我实际介绍一下这个方法,其他一切都完全相同。因此,这是查询字符串,我们根据某些条件删除一些项目。并且,我们只是在这里将其传递给 ExecuteNonQuery()。
//region ExecuteNonQuery
private static void DeleteData()
{
try
{
string query = "DELETE FROM Model_Classes.Product WHERE UnitsInStock > ?";
var queryCommand = new QueryCommand(query);
queryCommand.Parameters.Add("UnitsInStock", 10);
_cache.SearchService.ExecuteNonQuery(queryCommand);
string query1 = "DELETE FROM Model_Classes.Orders WHERE OrderID > ?";
var queryCommand1 = new QueryCommand(query1);
queryCommand1.Parameters.Add("OrderID", 10248);
_cache.SearchService.ExecuteNonQuery(queryCommand1);
}
catch (Exception)
{
throw;
}
}
让我们看看这个。同样,它只有一个参数需要使用,那就是查询命令。
int ExecuteNonQuery(QueryCommand queryCommand);
让我们返回,然后再次返回并运行应用程序。好了。完美。一个客户端已连接。现在,在我按下 Enter 键之前,现在您可以看到计数大约是每箱 400-500 件。我一按下 Enter 键,计数就会下降。就是这样。所以,计数现在回到了每箱 100 件或少于 100 件。
因此,您可以根据任何标准简单地从缓存中删除任何项目,而不必一次又一次地调用 API、删除 API 或一次又一次地移除 API。
所以,这一切都是关于 NCache API、执行读取器、执行标量、执行非查询。所有这些 API、所有这些实现以及代码都已在我们的网站上提供。因此,在 缓存中的 SQL 查询,我们有这个文档。它有完整的详细信息。所以,你有概述。如果你想使用或删除数据,你可以使用执行读取器,标量。然后我们有 SQL 参考文档. 这将解释所有支持的 SQL 语法 NCache,支持的查询格式 NCache。所以,所有这些都可以在这里查看。所以你可以去这个文档并在你这边查看。
现在,如果你谈论接下来的步骤,我强烈建议你们 下载 NCache 免费30日试用版。这将为您提供 30 天的完整工作产品。为此,您只需访问我们的网站 alachisoft.com 并在右上角单击此下载按钮即可下载 NCache 并启动 POC。
第二步是尝试 NCache 游乐场。现在, NCache Playground 是我们提供的托管服务。它将为您提供 30 分钟的沙盒会话,您将在其中拥有一个 2 节点缓存集群,并且您将能够使用它来编辑和运行 .NET 以及 Java 示例。并且,为了做到这一点,您只需访问我们的网站,在顶部,您可以转到我们的资源并单击此 尝试游乐场 这里,或者您可以访问我们的网站,在右上角您可以看到尝试游乐场按钮。
最后,我还强烈建议你安排一次个性化的 NCache 我们讨论的演示 NCache 架构、功能,我们了解您的用例和所有有用的信息。为了做到这一点,您需要再次访问我们的网站,转到资源,然后单击 安排演示,填写表格,我们将会处理。
所以,伙计们,这都是关于 NCache SQL 查询 SQL 搜索功能,如何实现它。如果您有任何问题,请随时联系我们,非常感谢您观看此视频。祝您有美好的一天!