Anders Liu的.NET空间
传播知识源于掌握知识,但又高于掌握知识。我要做一个掌握很多知识的传播知识的人。
博客园
首页
新随笔
联系
订阅
管理
随笔 - 76 文章 - 2 评论 - 1116 trackbacks - 28
我的小工具
HTML、URL编解码工具
中国游戏开发者网络
|
论坛
广告
北京狼烟网络科技有限公司
北京市朝阳区曙光西里甲6号 时间国际A座1505&msg=2007101111175778000" frameBorder=0 scrolling=no>
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(7)
给我留言
查看留言
我管理的小组
正则表达式
Asp.Net MVC
博客园宝宝乐园
我参加的小组
ASP.NET
.NET 3.x
创业交流
写书译书小组
CLR基础研究小组
LINQ
.Net+MySQL
博客园出书小组
我参与的团队
北京.NET俱乐部(0/1449)
Windows Mobile 应用开发(0/574)
MVP(微软最有价值专家)团队(0/540)
软件项目管理团队(0/197)
CLR基础研究团队(0/375)
Windows Embedded开发(0/88)
博客园精华集出版(0/42)
正则表达式团队(0/2)
ASP.NET MVC团队(0/29)
我的标签
asp.net mvc
(16)
regex
(2)
.net
(2)
html
(2)
regex-lib.net
(2)
CLR
(2)
CLI
(2)
PE
(2)
regex-lib
(1)
url编码
(1)
更多
随笔分类
ASP.NET MVC(16)
CLR / CLI(2)
P宝日记
随笔档案
2008年8月 (3)
2008年7月 (16)
2008年6月 (3)
2008年4月 (1)
2008年3月 (2)
2008年2月 (1)
2008年1月 (5)
2007年12月 (5)
2007年11月 (4)
2007年10月 (1)
2007年8月 (4)
2007年7月 (3)
2007年6月 (3)
2007年5月 (5)
2007年4月 (4)
2007年3月 (4)
2007年2月 (1)
2006年11月 (1)
2006年9月 (1)
2006年7月 (2)
2006年6月 (2)
2006年5月 (1)
2006年4月 (3)
文章档案
2006年4月 (1)
相册
MVP Logo
友情链接
【孟宪会之精彩世界】之.NET开发者园地
涵舍愚人
积分与排名
积分 - 198416
排名 - 164
最新评论
1. re: 备忘录——压缩整数及其解压缩
:) 这么勤奋呢 排版不错
这是多少页的,咋没看到呢还
俗俗的顶一个 呵呵
--xwang
2. re: [翻译] ASP.NET MVC Tip #8 – 创建ASP.NET MVC GridView辅助方法
自定义内容太少,还是用ul li好
--石晟@竟然有人用了我的名字
3. re: 软件系统复杂度守恒原理
我认为你的说法有个致命的缺陷。软件系统本身并不是目标,它只是工具。说一个工具的复杂度是守恒的,我觉得没有任何实际意义。 我认为有意义的应该是要达到一个目标,如何使用或者创建最简便的工具去实现你的目标!...
--思辩的乐趣
4. re: 在作缓存时使用SqlCacheDependency
sql缓存依赖。很好很强大
--代码乱了
5. re: 【.NET正则表达式库】v1.0上线
囧,我用C++弄过一个正则表达式引擎,因此还写了两篇教程贴在我的C++Blog上面……
--陈梓瀚(vczh)
阅读排行榜
1. 也说《不要奢望.NET能够跨平台》(18952)
2. 关于编码的思考(7331)
3. 晒一下我和老婆的婚纱照!(7037)
4. 翻译:Single Sign-On for Everyone(3747)
5. .NET Micro Framework简介(第一部分) (3740)
评论排行榜
1. 晒一下我和老婆的婚纱照!(173)
2. 也说《不要奢望.NET能够跨平台》(81)
3. 写电子邮件是一件严肃的事情(62)
4. 【.NET正则表达式库】v1.0上线(62)
5. Internet Explorer 8之我见(44)
60天内阅读排行
1. 关于使用GUID和Identity做主键的一些思考(2178)
2. [翻译] 做CSS精简时可能会用到的正则表达式(1923)
3. 在作缓存时使用SqlCacheDependency(1748)
4. [翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper(1548)
5. [翻译] ASP.NET MVC Tip #7 – 使用Html.Encode避免JavaScript注入攻击(1469)
在作缓存时使用SqlCacheDependency
请允许我先闲扯两句。
今天发生了不少事情。首先,确认了我已经为20年后的技术社区做出了不可磨灭的贡献。其次,[.NET正则表达式库](
http://regex-lib.net
)终于去掉了令人恼火的验证码,转而使用IP地址检验。最近两篇blog我将介绍其中用到的一些技巧。
今天要说的是在缓存时使用SqlCacheDependency。其应用场景是IP地址屏蔽,数据库里有一张表IPBlocked,记录了被屏蔽的IP。由于每次进行注册或尝试登录时都要检查IP,而IP屏蔽表又不会经常变化,所以需要使用缓存。并且该缓存依赖该数据表,即如果表中数据发生了变化,缓存应该失效。
好困啊,不多扯了,我这里就给出操作步骤。
1. 修改web.config,启用SqlCacheDependency。将下列代码加入web.config的<system.web>节:
<
caching
>
<
sqlCacheDependency
enabled
="true"
>
<
databases
>
<
add
connectionStringName
="regex_libConnectionString"
name
="IPBlockedDependency"
/>
</
databases
>
</
sqlCacheDependency
>
</
caching
>
这里的connectionStringName指定了在<connectionStrings>中添加的某一个连接字符串。name则是为该SqlCacheDependency起的名字,这个名字将在第3步中用到。
2. 执行下述命令,为数据库启用缓存依赖:
C:\Program Files\Microsoft Visual Studio
9.0
\VC
>
aspnet_regsql
-
C
"
Data Source=.;Initial Catalog=regex-lib;Integrated Security=True
"
-
ed
-
et
-
t
"
IPBlocked
"
这里-C后面的字符串是连接字符串(请替换成自己所需要的值),-t参数后面的字符串是数据表的名字。命令执行后,数据库中会多出一个
AspNet_SqlCacheTablesForChangeNotification表。
3. 在代码中使用缓存,并为其设置SqlCacheDependency依赖:
private
static
string
[] GetBlockedIPs()
{
//
1尝试从缓存中读取
string
[] ips
=
(
string
[])HttpContext.Current.Cache[BlockedIPCacheKey];
if
(ips
!=
null
)
return
ips;
//
2从数据库中读取
using
(RxDataContext db
=
new
RxDataContext())
{
ips
=
db.IPBlockeds.Select(ipb
=>
ipb.UserIP).ToArray();
}
//
3放入缓存
SqlCacheDependency depend
=
new
SqlCacheDependency(
"
IPBlockedDependency
"
,
"
IPBlocked
"
);
HttpContext.Current.Cache.Insert(BlockedIPCacheKey, ips, depend);
return
ips;
}
创建SqlCacheDependency时需要指定web.config中定义的SqlCacheDependency名字,并指定数据表的名称。
好了,这只是一个步骤列表,或者可以当作一个checklist用。
------
最后,[.NET正则表达式库](
http://regex-lib.net
)在注册、登录和发表回复时已经没有什么过多的限制了,欢迎大家访问、注册、把您的正则表达式分享进来。
Tag标签:
cache
,
SqlCacheDependency
posted on 2008-06-26 22:27
Anders Liu
阅读(1748)
评论(14)
编辑
收藏
FeedBack:
#1楼
2008-06-26 23:40
wsky
不知道博主在部署的时候,有没有遇到权限问题?
描述:
我在服务器上(虚拟主机)部署的时候,由于数据库不是自己的,但是部署SqlCacheDependency时所自动建立的存储过程和数据表均是dbo创建的,运行后就会报错没有启用sql轮询的权限
回复
引用
查看
#2楼
2008-06-27 00:07
曲滨*銘龘鶽
支持其他数据库不?如 Oracle
回复
引用
查看
#3楼
[
楼主
] 2008-06-27 00:13
Anders Liu
--引用--------------------------------------------------
wsky: 不知道博主在部署的时候,有没有遇到权限问题?
描述:
我在服务器上(虚拟主机)部署的时候,由于数据库不是自己的,但是部署SqlCacheDependency时所自动建立的存储过程和数据表均是dbo创建的,运行后就会报错没有启用sql轮询的权限
--------------------------------------------------------
自己的服务器,没遇到类似问题。
回复
引用
查看
#4楼
[
楼主
] 2008-06-27 00:15
Anders Liu
--引用--------------------------------------------------
曲滨*銘龘鶽: 支持其他数据库不?如 Oracle
--------------------------------------------------------
SqlCacheDependency,顾名思义,应该是仅支持Sql Server。不过模仿其源代码和AspNet_SqlCacheTablesForChangeNotification表的结构,不难写个OracleCacheDependency。
回复
引用
查看
#5楼
2008-06-27 02:21
空调过滤器 [未注册用户]
怎么用内存作磁盘缓存。*
回复
引用
#6楼
2008-06-27 07:39
新程金锣
呃……我理解上SQL SERVER那边做了缓存配置之后,在ASP.NET这边就不需要再把数据保存到Cache里了吧?要不然数据表内容发生变动之后,如何自动更新ASP.NET中的缓存?
我还是先去查一下……
回复
引用
查看
#7楼
[
楼主
] 2008-06-27 08:43
Anders Liu
--引用--------------------------------------------------
空调过滤器: 怎么用内存作磁盘缓存。*
--------------------------------------------------------
这个不是我等凡人考虑的。
回复
引用
查看
#8楼
[
楼主
] 2008-06-27 08:45
Anders Liu
--引用--------------------------------------------------
新程金锣: 呃……我理解上SQL SERVER那边做了缓存配置之后,在ASP.NET这边就不需要再把数据保存到Cache里了吧?要不然数据表内容发生变动之后,如何自动更新ASP.NET中的缓存?
我还是先去查一下……
--------------------------------------------------------
这个只是在SQL Server上做了个“缓存依赖”。另外,表中的数据变化后,缓存会自动“失效”而不会自动更新。文中步骤3里的代码段2和3,实际上实在手动更新缓存。
回复
引用
查看
#9楼
2008-07-21 19:37
Summer99
感谢楼主,正好我也在做这个功能
再请教一点:BlockedIPCacheKey是什么呢
我数据库做更改后缓存没失效,所以问问
tks
回复
引用
查看
#10楼
2008-07-21 19:49
Summer99
我是说,这个是自己随便取的一个cache名字吗
回复
引用
查看
#11楼
2008-07-21 19:53
Summer99
恩,偶尔可以奏效,不大明白
回复
引用
查看
#12楼
2008-07-21 20:41
Summer99
另外请教:这个做法是要固定时间到数据库里面查吗,表更改后怎样使Cache过期的,能简述一下详细的原理吗?
非常感谢
回复
引用
查看
#13楼
[
楼主
] 2008-07-21 22:20
Anders Liu
@Summer99
BlockedIPCacheKey只是随便起的一个名字。
其具体原理我也不大清楚,但应该是有SQL Server那边发起的,不需要程序轮询,效率应该还可以。
另外,缓存的确不是即时过期的,但对于缓存场景来说,这不重要。
回复
引用
查看
#14楼
2008-08-17 14:52
代码乱了
sql缓存依赖。很好很强大
回复
引用
查看
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
最新IT新闻:
·
第一财经周刊:当前互联网世界正处无秩序时代
·
Visual Studio 2008 SDK 1.1 发布
·
死敌VMware变身微软认证计划新成员
·
英特尔雅虎开发网络计算机频道
·
Windows Live视频邮件9月9日开始测试
博客园新闻频道
博客园首页
社区