NCache 4.4 - 在线文档

配置通读提供程序

 
应遵循以下步骤来配置和实现 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 包含缓存的键和值
}
捕捉 (操作失败异常 经验)
{
//处理异常
}
 
  • 将通读提供程序与 CacheItem 一起使用
 
对于这种情况,请使用以下 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 在加载程序集期间出现异常时在应用程序事件日志中记录警告。
 
 
 
参见