添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
备注

此功能仅在 NCache Enterprise 型号 .

NCache 提供 Oracle缓存依赖 用于与 Oracle 的基于通知的依赖关系。 在内部, NCache 使用 OracleDependency 向 Oracle 数据库服务器注册数据更改通知。 因此,您需要了解其局限性和工作机制 OracleDependency 在使用此依赖项时。 有关更多详细信息,请参阅以下 Oracle 文档。

  • 使用查询通知的特殊注意事项
  • Oracle依赖
  • Oracle 依赖关系由 NCache 用于与 Oracle 数据库同步缓存。 如果命令的结果(基于命令文本)更改,则项目过期。 Oracle 依赖项可用于 Oracle 数据库 11g 或更高版本。 还要确保安装了适用于 .NET 的 Oracle 数据提供程序(版本 10.1.0.2.0 或更高版本)。

    数据库更改通知是基于对象的。 这意味着如果在对象中修改了任何行,将触发更改通知。 因此,建议检查 rowID 以确认更改的行是否是注册事件的行。 除非明确包含在查询中,否则无法检索 RowID。 因此,用户必须在正在注册的查询中专门包含 rowID OracleDependency ,否则如果表中的任何行被修改,将触发更改通知。

    当 rowID 包含在查询中时,例如 – Select rowID, productID, productname, unitprice from Products where ProductID = 220 - NCache 将保存注册更改通知的行的 rowID。 当它收到任何更改通知时, NCache 将比较 rowID 以确定更改的行是否是注册了 rowID 的行。 除此以外 NCache 将无法对此进行检查,并且如果表中的任何行发生更改,则可能会删除已注册更改通知的项目。

    备注

    在使用 Oracle Dependency 之前,请参考设置 Oracle 数据库环境 设置 Oracle 数据库环境 管理员指南中的部分。

  • Alachisoft.NCache.Client
  • Alachisoft.NCache.Runtime.Dependencies
  • Alachisoft.NCache.Runtime.Exceptions
  • 缓存必须正在运行。
  • 确保要添加的数据是 可序列化 .
  • 为确保操作是故障安全的,建议处理应用程序中的任何潜在异常,如中所述 处理故障 .
  • 在您的应用程序中包含以下命名空间:
    • import com.alachisoft.ncache.web.caching.*;
    • import com.alachisoft.ncache.runtime.exceptions.*;
    • 申请必须是 连接到缓存 在执行操作之前。
    • 缓存必须正在运行。
    • 确保要添加的数据是 可序列化 .
    • 为确保操作是故障安全的,建议处理应用程序中的任何潜在异常,如中所述 处理故障 .
    • 添加具有 Oracle 依赖关系的数据

      使用 Oracle Dependency 添加后更改数据会将其从缓存中删除。 Oracle缓存依赖 用于指定依赖条件,然后使用 Add/Insert 方法将项目添加到缓存中。

      以下示例添加数据 OracleCacheDependency 使用 插页 方法。 的 Insert 方法添加一个具有依赖关系的新项目,如果该项目已经存在于缓存中,它会覆盖其属性。 在 Java 的情况下,项目在设置后插入缓存中 设置依赖 CacheItem 的属性 Oracle依赖 .

      。网/.NET Core // Creating a connection string to establish connection with the database // Connection String is in <AppSettings> string connectionString = ConfigurationManager.AppSettings["connectionstring"]; // Create the query which selects the data on which key is dependent string query = "SELECT ROWID, ProductID, ProductName, UnitPrice FROM Products WHERE ProductID > :productID"; var param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.Int16); param.Value = 1020; param.Direction = OracleParameterDirection.Input; // Adding the populated parameter to a dictionary Dictionary<string, OracleCmdParams> oracleParam = new Dictionary<string, OracleCmdParams>(); oracleParam.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, query, OracleCommandType.Text, oracleParam); // Get Product from database against given product ID Product product = FetchProductFromDB(param.Value); // Generate a unique cache key for this product string key = $"Product:{product.ProductID}"; // Create a CacheItem and add Oracle dependency to it var cacheItem = new CacheItem(product); cacheItem.Dependency = oracleDependency; //Add cache item in the cache with Oracle Dependency cache.Insert(key, cacheItem); // For successful addition of item with Oracle Dependency // Update the record in the database and check if key is present // This can be done by using // cache.Contains() // cache.Count catch (OperationFailedException ex) // Exception can occur due to: // Connection Failures // Operation Timeout // Operation performed during state transfer catch (Exception ex) // Any generic exception like ArgumentNullException or ArgumentException // Exception may occur due to incorrect query format or invalid connection string // Creating a connection string to establish connection with the database String connectionString = "your-connection-string"; // Create the query which selects the data on which key is dependent String query = "SELECT rowID, productName FROM Products WHERE productID = 1001"; // Get Product from database against given product ID Product product = fetchProductFromDB(connectionString, query); // Generate a unique cache key for this product String key = "Product:" + product.ProductID; // Create Oracle Dependency CacheDependency oracleDependency = new OracleCacheDependency(connectionString, query); // Create a new cacheitem and add oracle dependency to it CacheItem cacheItem = new CacheItem(product); cacheItem.setDependency(oracleDependency); //Add cache item in the cache with Oracle Dependency cache.insert(key, cacheItem); catch (Exception ex) // Exception can occur due to: // Connection Failures // Operation Timeout // Operation performed during state transfer // Any generic exception

      推荐 :为确保操作是故障安全的,建议处理应用程序中的任何潜在异常,如中所述 处理故障 .

      使用存储过程添加具有 Oracle 依赖关系的数据

      NCache 使您能够使用存储过程为项目提供 Oracle 依赖项。 您还可以使用 Oracle缓存依赖 方法。

      以下示例使用 Oracle Dependency 通过存储过程将项目添加到缓存中,使用 插页 方法。 的 Insert 方法添加一个具有依赖关系的新项目,如果该项目已经存在于缓存中,它会覆盖其属性。

      // Create a connection string to establish connection with the database // Connection String is in <AppSettings> in App.config string connectionString = ConfigurationManager.AppSettings["connectionstring"]; // The name of the stored procedure the item is dependent on string storedProcName = "GetProductByID"; OracleCmdParams param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.Int16); param.Value = 1020; param.Direction = OracleParameterDirection.Input; var oracleCmdParams = new Dictionary<string, OracleCmdParams>(); oracleCmdParams.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, storedProcName, OracleCommandType.StoredProcedure, oracleCmdParams); // Get product from database against given product ID Product product = FetchProductFromDB(param.Value); // Generate a unique cache key for this product string key = $"Product:{product.ProductID}"; // Create a new cacheitem and add Oracle dependency to it var cacheItem = new CacheItem(product); cacheItem.Dependency = oracleDependency; // Add cacheitem in the cache with Oracle Dependency cache.Insert(key, cacheItem); // For successful addition of item with Oracle Dependency // Update the record in the database and check if key is present // This can be done by using // cache.Contains() // cache.Count catch (OperationFailedException ex) // Exception can occur due to: // Connection Failures // Operation Timeout // Operation performed during state transfer catch (Exception ex) // Any generic exception like ArgumentNullException or ArgumentException // Exception may occur due to incorrect query format or invalid connection string

      推荐 :为确保操作是故障安全的,建议处理应用程序中的任何潜在异常,如中所述 处理故障 .

      NCache 在以下位置提供 Oracle 依赖项的示例应用程序:

    • GitHub上
    • 附带 NCache: %NCHOME%\samples\dotnet\Dependency\OracleDependency
    • 与 SQL Server 同步缓存
      缓存数据对 OleDB 的依赖
      带有缓存的 SQL Server 中的 CLR 过程
      为并发控制锁定数据
      缓存数据对外部源的依赖

  •