一切福田,不離方寸,從心而覓,感無不通。

ASP.NET缓存全解析4:应用程序数据缓存

System.Web.Caching 命名空间提供用于缓存服务器上常用数据的类。此命名空间包括 Cache 类,该类是一个字典,您可以在其中存储任意数据对象,如哈希表和数据集。它还为这些对象提供了失效功能,并为您提供了添加和移除这些对象的方法。您还可以添加依赖于其他文件或缓存项的对象,并在从 Cache对象中移除对象时执行回调以通知应用程序。

  以上几种方法都很好的解决了数据缓存的问题,但由一个最大的问题是当数据发生变化了,而缓存里还是过期的数据,只有等缓存过期后才会重新获取最新的数据,这样的话,很多时候用户获取的数据都是和实际数据不一致的过期数据。这同样给用户造成了比较大的麻烦,怎么办呢?接着往下看。 转自:http://kb.cnblogs.com/page/69725/

龙生   18 Mar 2013
View Details

ASP.NET缓存全解析6:数据库缓存依赖

更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能。但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致。那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验。   答案是肯定的!.NET已经为我们提供了这样一种非常好的解决方法:SqlCacheDependency数据库缓存依赖。   实现步骤:   下面就让我们看一下如何实现数据库缓存依赖功能:   第一步: 修改web.config,让项目启用SqlCacheDependency 。   将下列代码加入web.config的<system.web>节:    

  这里的connectionStringName指定了在<connectionStrings>中添加的某一个连接字符串。name则是为该SqlCacheDependency起的名字,这个名字将在第3步中用到。  SqlCacheDependency类会自动完成对此配置节信息的读取以建立和数据库之间的联系。   注意:在<databases>节的<add name="codematic" connectionStringName="strcodematic"/>中的name属性值必须和第三步的Page_Load代码中System.Web.Caching.SqlCacheDependency("codematic","P_Product"); 中的第一个参数(数据库名称)相一致。  第二步:执行下述命令,为 数据库启用缓存依赖。   如果要配置SqlCacheDependency,则需要以命令行的方式执行。   aspnet_regsql.exe工具位于Windows\\Microsoft.NET\\Framework\\[版本]文件夹中。   aspnet_regsql -C "data source=127.0.0.1;initial catalog=codematic;user id=sa;password=" -ed -et -t "P_Product"   参数-C后面的字符串是连接字符串(请替换成自己所需要的值),   参数-t后面的字符串是数据表的名字。   运行结果如图15-3所示: 图15-3  启用数据库缓存依赖   命令执行后,在指定的数据库中会多出一个AspNet_SqlCacheTablesForChangeNotification表。   注意:   要使得7.0或者2000版本以上的SQLServer支持SqlCacheDependency特性,需要对数据库服务器执行相关的配置。   有两种方法配置SQLServer:   一使用aspnet_regsql命令行工具,   二使用SqlCacheDependencyAdmin类。   例如:   aspnet_regsql -S "server"-E -d "database"–ed  或者   aspnet_regsql -S "server"-E -d "database"-et -t "table"  如果是Sql验证的话要把-E换成,-U (用户名),-P (密码)   以下是该工具的命令参数说明:   -? 显示该工具的帮助功能;   -S 后接的参数为数据库服务器的名称或者IP地址;   -U 后接的参数为数据库的登陆用户名;   -P 后接的参数为数据库的登陆密码;   -E 使用当前登录用户的 Windows 集成认证进行身份验证。   -d 后接参数为对哪一个数据库采用SqlCacheDependency功能;   -C 连接数据库的连接字符串。如果您指定服务器(-S)和登录(-U和-P,或 -E)信息,则此选项不是必需的,因为连接字符串已经包含这些信息。   -t 后接参数为对哪一个表采用SqlCacheDependency功能;   -ed 允许对数据库使用SqlCacheDependency功能;   -dd 禁止对数据库采用SqlCacheDependency功能;   -et 允许对数据表采用SqlCacheDependency功能;   -dt 禁止对数据表采用SqlCacheDependency功能;   -lt 列出当前数据库中有哪些表已经采用sqlcachedependency功能。   第三步:在代码中使用缓存,并为其设置SqlCacheDependency依赖:

[…]

龙生   18 Mar 2013
View Details

Drupal Ver 7.0 的迁移方法

上周为Edu 2.0研究中心申请的空间今天批准下来了,所以中午抽空将站点从内网服务器迁移出去了。因为这过程中起了一点波折,所以还是觉得有必要记一笔,以后也可以有个参考。 以下基本是按本人操作的过程,因为之前并没经验,未必是最佳实践,看客自行斟酌,有不准确的,或者有更好的解决方法的,不妨也可以在评论中给提个建议: 1、大约12点收到FTP、MySQL帐户信息,打算开始迁移,所以在微博里放出风声,告知我们的成员在接下来的3个小时内将执行系统迁移,原部署于内网的系统会不可访问; 2、在本地服务器上,使用PHPMyAdmin,选中Drupal使用的数据库,选择export,将数据记录以默认格式导出为tempDrupal.SQL;如果你原先没有配置phpmyadmin,那么使用前需要修改phpmyadmin\libraries\config.default.php文件配置以下基本参数: $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['user'] = 'MYSQL数据库帐号'; $cfg['Servers'][$i]['password'] = 'MYSQL数据库密码'; 3.敲以下命令停止Apache和MySQL服务(具体服务名称以系统中配置的为准),用FTP帐号将原先的Drupal目录中的所有文件传送到目标空间中 net stop apache2.2 net stop mysql 4. 在目标空间上同样上传并配置一个phpmyadmin,登录后选择import,将之前导出的tempDrupal.SQL导入数据库中,这时在phpmyadmin中就可以看到数据库的内部结构了。 5、修改目标空间中的Drupal配置文件,即/sites/default/settings.php。将其中的数据库信息,设置为符合目标空间的值,这些设置语句形如下文。顺便也可以将系统的$base_url 、$cookie_domain均设置为站点的域名,例如“ 'http://et2x.zjnu.edu.cn';”(注意不带“/”) $databases = array (  'default' =>  array (    'default' =>    array (      'database' => '数据库名称',      'username' => '数据库用户名',      'password' => '数据库密码',      'host' => 'localhost',      'port' => '',      'driver' => 'mysql',      'prefix' => '',    ),  ),); 6、到这一步时访问install.php,执行更新脚本,至此,迁移后的空间应该可以显示出来。如果在执行这一脚本时提示没有权限,可以在settings.php中设置 “$update_free_access = TRUE; ”(但执行完后一定要记得改回FALSE或注释掉) 7、不过我在此步登录之后做了一个手欠的事,顺手在主题列表选择另一个主题,结果系统报出一个“failed to open stream: "DrupalTemporaryStreamWrapper::stream_open"”的错误,愣了一会才意识到系统中配置的临时文件夹还没改,在“配置”/“媒体”/“文件系统”中更改了就恢复原先的主题风格了。 […]

龙生   18 Mar 2013
View Details