备注
此功能仅在
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 过程
为并发控制锁定数据
缓存数据对外部源的依赖