应遵循以下步骤来配置和实现 Read-Through 提供程序 NCache.
实现 IReadThruProvider 接口
实施 IReadThruProvider,在提供程序程序集中添加以下引用。
Alachisoft.NCache.运行时.dll
创建一个实现类 Alachisoft.NCache.Runtime.DatasourceProviders.IReadThruProvider 接口并使用 NCache 去吃。 NCache 如果缓存中不可用,框架将在内部使用此类从配置的数据源加载数据。
IReadThru 接口
公共无效 初始化(系统。集合。身份证 参数, 串缓存ID);
公共无效 处置();
公共无效 加载源(绳子 键, 输出 Provider缓存项缓存项);
公共 字典<绳子, Provider缓存项> 从源加载(绳子[]键);
委员
|
课程描述
|
在里面
|
该方法将被调用 NCache 缓存启动框架。 用户可以使用此方法执行诸如分配资源、获取数据源连接等任务。此方法将 IDictionay 参数实例作为输入,通过 NCache Manger(配置设置)。 它允许您将参数列表传递给提供者。 这些参数可以以多种方式使用。 例如,可以将数据源的连接字符串指定为参数。 因此,它提供了一种灵活的方式来更改数据源设置,同时无需更改代码即可对其进行配置。
另一个参数CacheId 指定为其配置读取的缓存名称。
|
从源加载
|
该方法将被调用 NCache 如果在缓存存储中找不到所需的项目并且 NCache 必须通过配置的数据源加载它。 此方法应包含从配置的数据源加载对象的逻辑。 第一个参数“key”指的是所需项目的键。 第二个参数是 Provider CacheItem 类型的 out 参数,需要将其与所需属性一起实例化在这里,您可以将各种属性与加载的项目相关联,然后再将其返回给 NCache 框架。 确保在此方法中分配的 Provider CacheItem.Value 是“Serializable”,因为 NCache 稍后将将该项目保存到缓存存储以满足未来的请求。
在实现此方法时,您应该注意代码线程安全,因为多个 Get 请求可以访问此方法进行通读。 还要注意避免导致递归无限循环的情况,例如在此方法中,读取同一缓存句柄的 Get 请求将导致无限递归。
请注意: 的情况下 积极, LoadFromSource(字符串键,出 ProviderCacheItemcacheItem) 将从提供者调用,而对于 获取批量, LoadFromSource(字符串 [] 键)
将被调用以从数据源加载项目。
|
部署
|
该方法将被调用 NCache 缓存停止时的框架。 您可以使用此方法执行诸如释放资源、处理连接等任务。在这里您可以释放与数据源相关的资源以有效利用资源。
|
|
In NCache, Read-Through 提供程序是在缓存级别配置的,即对于集群缓存,所有节点都将包含提供程序配置及其部署的程序集。
|
IReadThruProvider 的示例代码
// 包含用于按对象从主数据源中读取对象的方法。
// 包含用于按对象从主数据源中读取对象的方法。
公开课 示例ReadThruProvider : IReadThruProvider
{
私立 连接 _联系;
//执行分配资源或获取连接等任务
公共无效 在里面(身份证 参数, 绳子 缓存ID)
{
对象 connStringObject = 参数[“连串”];
绳子 连接字符串 = 连接字符串对象 == 空 ? "" : connStringObject.ToString();
if (连接字符串!= "")
_连接= 新 连接(连接字符串);
尝试
{
_connection.Open();
}
捕捉 (特殊课程 EX)
{
//处理异常
}
}
//负责从外部数据源加载项。
公共无效 加载源(绳子 键, 输出 Provider缓存项 缓存项)
{
//其中 LoadFromDataSource 是从数据源加载数据的虚拟方法。
对象 值 = LoadFromDataSource(键);
缓存项 = 新 Provider缓存项(价值);
cacheItem.ResyncItemOnExpiration = true;
}
//执行与释放、释放或重置资源相关的任务。
公共无效 处置()
{
if (_连接!= 空)
_connection.Close();
}
//负责从外部数据源加载大量项目。
国家 字典<绳子, Provider缓存项>从源加载(绳子[] 键)
{
尝试
{
字典<绳子, Provider缓存项> 字典 = 新 字典<绳子, Provider缓存项>();
绳子 关键= 空;
(INT 索引 = 0; 指数
{
键=键[索引];
//其中 LoadFromDataSource 是从数据源加载数据的虚拟方法。
字典.添加(键, 新 Provider缓存项(LoadFromDataSource(key)));
}
回报 字典;
}
捕捉 (特殊课程 经验)
{
扔;
}
}
私有对象 加载自数据源(绳子 键)
{
对象 检索对象 = 空;
// 从您的数据源加载项目并填充检索到的对象
回报 检索对象;
}
}
实现和部署此提供程序后,可以直接调用 NCache 获得所需的物品。 如果项目在缓存存储中本地不可用, NCache 将使用指定数据访问类中的“LoadFromSource”方法从数据源加载项目.
将通读与基本操作一起使用
本节将在配置和部署后解释通读提供程序的使用。 NCache 支持具有应用程序的多个通读提供程序。
在应用程序中添加以下命名空间:
运用 Alachisoft.NCache.Web.缓存;
运用 Alachisoft.NCache.Runtime.DatasourceProviders;
运用 Alachisoft.NCache。运行;
NCache 提供 Alachisoft.NCache.Web.Caching.DSReadOption 枚举指定 API 中的 Read thru 选项。
可以通过配置多个通读提供程序 NCache. 如果未通过 API 提及特定的提供者名称,则将调用默认的通读提供者。 您还可以通过使用提供程序特定的 API 重载来使用默认提供程序以外的提供程序。
委员
|
课程描述
|
得到(绳子 键, DSRead选项 ds读取选项)
|
从缓存中获取项目并使用默认提供程序
|
得到(绳子 键, 绳子 提供者名称, DSRead选项 ds读取选项)
|
从缓存中获取项目并使用指定的提供者
|
产品 产品=空;
尝试
{
绳子 关键= “产品:1001”;
对象 数据 = 缓存。获取(键, DSRead选项.ReadThru);
if (数据!= 空)
{
产品 = (产品)数据;
}
}
捕捉 (操作失败异常 经验)
{
//处理异常 }
为了更好地理解这些操作审查
批量操作. 在这种情况下,使用以下 API
委员
|
课程描述
|
身份证 批量获取(绳子[]键, DSRead选项 ds读取选项)
|
从缓存中获取批量项目并使用默认提供程序
|
身份证 批量获取(绳子[]键, 绳子 提供者名称, DSRead选项 ds读取选项)
|
从缓存中获取批量项目并使用指定的提供程序
|
尝试
{
串[] 键 = { “产品:1001”, “产品:1002”, “产品:1003”, “产品:1004” };
身份证 resultSet = cache.GetBulk(键, DSRead选项.ReadThru);
//IDictionary 包含缓存的键和值
}
捕捉 (操作失败异常 经验)
{
//处理异常
}
对于这种情况,请使用以下 API。
委员
|
课程描述
|
缓存项 获取缓存项(绳子 键 DSRead选项 ds读取选项)
|
从缓存中获取 CacheItem 并使用默认提供程序
|
获取缓存项(绳子 键, 绳子 提供者名称, DSRead选项 ds读取选项)
|
从缓存中获取 CacheItem 并使用指定的提供者
|
绳子 关键= “产品:1001”;
产品 产品=空;
尝试
{
缓存项 数据 = cache.GetCacheItem(key, DSRead选项.ReadThru);
if (数据!= 空)
{
产品 = (产品)数据.值;
}
}
捕捉 (特殊课程 经验)
{
//处理异常
}
请注意,您可以通过 NCManager 或通过放置在 config 文件夹中的 client.ncconf 指定默认提供程序 NCache 安装目录。 如果 API 和 client.ncconf 中都没有提供提供者名称,将自动使用默认提供者。
<缓存 id="我的缓存" 默认读取提供程序="默认提供者名称" 客户端缓存 ID="" 客户端缓存同步模式="乐观的" 默认写入提供程序="" 负载均衡="真" 服务器运行时上下文="NCACHE">
...
</缓存>
CacheInitParam 也可用于指定提供程序。
NCache 在加载程序集期间出现异常时在应用程序事件日志中记录警告。
参见