博客园-首页原创区

程序员的网上家园

[原创]QQ密码保护批量申请器
Thu, 20 Nov 2008 18:59:00 GMT
摘要: 软件开发过程小记1. 本软件应vikecn.com的项目需求所写,可惜被雇主放飞机,做好了和我说不要,BS这种人。2. 软件第一个版本V1.0.0.0由2008-10-18开始编写,2008-11-10基本完成初始版本。3. 软件包含Microsoft.mshtml.dll文件,必须将其打包到发布目录中,否则会造成部分机器验证码不能显示一、功能简介1. 半自动批量查询密保(有无密码均可查询)2.   阅读全文

[新闻]IBM联合顶尖大学研发认知计算 未来模拟大脑
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
利用虚拟方法和反射简化Alisoft API的调用
Thu, 20 Nov 2008 16:17:00 GMT
摘要: 最近一直在研究Alisfot api,他的文档和帮助都让我很郁闷,可能是第一次做这种开放api的程序吧.为了简化那些烦人的参数和返回值的调用,可以利用.net的匿名委托和反射机制来达到目的,简化后代码可以如下所示:///<summary>/// 此接口方法以实现得到前台展示的店铺内卖家自定义商品类目。///</summary>///<param name="Nick"  阅读全文

[新闻].NET Framework 3.5 SP1完整版发布
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
一些有趣的404错误设计
Thu, 20 Nov 2008 16:16:00 GMT
摘要: 今天boss抱怨俺们的404出错页面做的太难看,从网上闲逛发现了这个东西,赶快晒出来和大家分享一把。我问了team中的几个人让他们选出喜欢的几种设计,发现真是众口难调,一个比一个TMD的要求高,让我们自己做,那真叫惨不忍睹:空空的页面,里面丢了几个汉字就搞定了。美工真的太重要了!废话少说,赶快丢出来,我个人最喜欢第一个设计,但是发现使用flash弄得,搞不定!L L没有办法只好选了第10幅的照片和  阅读全文

[新闻]GMail再次更新:带来新主题
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
使用微软分布式缓存服务Velocity Part 2
Thu, 20 Nov 2008 16:00:00 GMT

概述

Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的缓存服务器。Velocity也将集成在.NET Framework 4.0中,本文将介绍Velocity中的配置模型、缓存复杂数据和创建分区、使用标签以及ASP.NET SessionState提供者。

配置模型

在本文开始之前,先简单介绍一下Velocity中的配置模型,主要包括三方面的配置,缓存集群的配置,缓存宿主服务器配置以及应用程序的配置,如下图所示:

Velocity_001

缓存集群的配置,可以基于XML、SQL Server CE或者SQL Server数据库来进行存储,包括各个服务器以及所有的命名缓存、是否过期等配置,当我们使用Windows PowerShell管理工具进行配置时,将会修改该配置文件,如下代码所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="dcache" type="System.Data.Caching.DCacheSection, 
             CacheBaseLibrary, Version=1.0.0.0, Culture=neutral,
             PublicKeyToken=89845dcd8080cc91" />
  </configSections>
  <dcache cluster="localhost" size="Small">
    <caches>
      <cache type="partitioned" consistency="strong" name="default">
        <policy>
          <eviction type="lru" />
          <expiration defaultTTL="10" isExpirable="true" />
        </policy>
      </cache>
      <cache type="partitioned" consistency="strong" name="other">
        <policy>
          <eviction type="lru" />
          <expiration defaultTTL="10" isExpirable="true" />
        </policy>
      </cache>
    </caches>
    <hosts>
      <host clusterPort="22234" hostId="1319514812" size="1024" quorumHost="true"
          name="TERRYLEE-PC" cacheHostName="DistributedCacheService"
          cachePort="22233" />
    </hosts>
    <advancedProperties>
      <partitionStoreConnectionSettings providerName="System.Data.SqlServerCe.3.5"
          connectionString="D:\CacheShare\ConfigStore.sdf" />
    </advancedProperties>
  </dcache>
</configuration>

在上一篇的示例中,并没有使用应用程序配置文件,事实上使用配置文件是更好的编程实践,首先需要添加一个配置区:

<section name="dcacheClient"
type="System.Data.Caching.DCacheSection, 
      CacheBaseLibrary, Version=1.0.0.0, 
      Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

配置信息包括部署方式,是否启用本地缓存以及缓存宿主等,如下代码所示:

<dcacheClient deployment="simple" localCache="false">
  <hosts>
    <host name="localhost" cachePort="22233"
          cacheHostName="DistributedCacheService"/>
  </hosts>
</dcacheClient>

现在Velocity CTP2对于应用程序使用配置的支持似乎有些问题。缓存宿主的配置放在DistributedCache.exe.config文件中,可以在Velocity安装目录下找到。

缓存复杂数据类型

在Velocity中,可以缓存任何类型的数据,如CLR对象、XML或者二进制数据等。现在看一个简单的示例,如何缓存复杂类型数据,定义一个如下的Customer类,注意要能够序列化:

[Serializable]
public class Customer
{
    public String ID { get; set; }

    public String FirstName { get; set; }

    public String LastName { get; set; }

    public int Age { get; set; }

    public String Email { get; set; }
}

对应用程序做配置,参考本文的配置模型部分,使用方法与简单数据类型的基本一致,如添加缓存项,使用Customer主键作为缓存键,其中GetCurrentCache()方法的实现请参考上一篇文章:

Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
    ID = "C20081117002",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};

cache.Add(customer.ID, customer);

获取缓存项:

Cache cache = GetCurrentCache();
Customer customer = cache.Get("C20081117002") as Customer;

移除缓存项:

Cache cache = GetCurrentCache();
cache.Remove("C20081117002");

更新缓存中数据,可以有两种方法,一是直接使用缓存索引,如果确保缓存键存在:

Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
    ID = "C20081117002",
    FirstName = "Huijui",
    LastName = "Li",
    Age = 26,
    Email = "lhj_cauc[#AT#]163.com"
};
cache["C20081117002"] = customer;

另外一种是使用Put方法,如果缓存键不存在,它将会新增到缓存中,否则会进行覆盖,如下代码所示:

Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
    ID = "C20081117002",
    FirstName = "Huijui",
    LastName = "Li",
    Age = 26,
    Email = "lhj_cauc[#AT#]163.com"
};
cache.Put(customer.ID, customer);

使用分区

在实际部署中,经常会出现多个应用程序共享同一个缓存集群,这不可避免的会出现缓存键冲突,如上面的示例中使用CustomerID作为缓存键,此时可以使用Velocity中的分区功能,它会在逻辑上把各个命名缓存再进行分区,这样可以完全保持数据隔离,如下图所示:

TerryLee_0216

图中共有三个命名缓存,其中在缓存Catalog中又分区为Sports和Arts。在Velocity中对于分区的操作提供了如下三个方法,可以用于创建分区,删除分区以及清空分区中所有的对象:

public void ClearRegion(string region);
public bool CreateRegion(string region, bool evictable);
public bool RemoveRegion(string region);

如下代码所示,创建了一个名为“Customers”的分区,在调用Add方法时可以指定数据将会缓存到哪个分区:

Cache cache = GetCurrentCache();
string regionName = "Customers";
cache.CreateRegion(regionName, false);

Customer customer = new Customer()
{
    ID = "C20081117003",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};

cache.Add(regionName, customer.ID, customer);

可以使用Get-CacheRegion命令在Windows PowerShell中来查看一下当前缓存集群中所有的分区信息,如下图所示:

Velocity_002

同样在检索缓存数据时,仍然可以使用分区名进行检索。

使用标签

在Velocity还允许对加入到缓存中的缓存项设置Tag,可以是一个或者多个,使用了Tag,就可以从多个方面对缓存项进行描述,这样在检索数据时,就可以根据Tag来一次检索多个缓存项。为缓存项设置Tag,如下代码所示:

Cache cache = GetCurrentCache();
string regionName = "Customers";

Customer customer1 = new Customer()
{
    ID = "C20081117004",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};
Customer customer2 = new Customer()
{
    ID = "C20081117005",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};

Tag tag1 = new Tag("Beijing");
Tag tag2 = new Tag("Tianjin");
cache.Add(regionName, customer1.ID, customer1, new Tag[] { tag1, tag2 });
cache.Add(regionName, customer2.ID, customer2, new Tag[] { tag2 });

这样就可以对设置了Tag的缓存项进行检索,根据实际需求选择使用如下三个方法之一:

GetAllMatchingTags(string region, Tag[] tags)
GetAnyMatchingTag(string region, Tag[] tags)
GetByTag(string region, Tag tag)

第一个检索匹配所有Tag的数据,第二个检索匹配所有Tag中的任意一个即可,最后只使用一个Tag,如下代码所示:

string regionName = "Customers";
Tag[] tags = new Tag[] { new Tag("Beijing"), 
           new Tag("Tianjin")};

List<KeyValuePair<string, object>> result
    = cache.GetAllMatchingTags(regionName, tags);

使用Tag功能对于检索缓存项提供了极大的灵活性,对于任何一个数据,都可以使用多个Tag从很多方面去描述它。

ASP.NET SessionState提供者

Velocity还提供了对于ASP.NET SessionState提供者的支持,可以通过配置把Session信息缓存到缓存集群中,添加Velocity配置区:

<section name="dcacheClient"
         type="System.Data.Caching.DCacheSection, 
         CacheBaseLibrary, Version=1.0.0.0, 
         Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

配置缓存客户端信息:

<dcacheClient deployment="simple" localCache="false">
  <hosts>
    <host name="localhost" cachePort="22233"
          cacheHostName="DistributedCacheService"/>
  </hosts>
</dcacheClient>

配置SessionState信息:

<sessionState mode="Custom" customProvider="Velocity">
  <providers>
    <add name="Velocity" 
         type="System.Data.Caching.SessionStoreProvider,ClientLibrary"
         cacheName="default"/>
  </providers>
</sessionState>

需要指定使用哪个命名缓存,但是该功能似乎到目前还存在问题,无法测试通过L

总结

本文简单介绍了Velocity的配置模型,以及如何缓存复杂数据类型,对命名缓存分区,为缓存项设置Tag,以及对于ASP.NET SessionState的支持,希望对大家有用。

相关文章:

1. 使用微软分布式缓存服务Velocity Part 1



[新闻]金山软件不放弃WPS 2009版与互联网深度融合
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
开源项目大家谈-网站性能调校-Cache的使用
Thu, 20 Nov 2008 15:25:00 GMT
摘要: 使用缓存(Cache) 对于缓存(Cache)的概念我想大家都很熟悉,网上也有很多介绍的文章,我在这里就不赘述了。 对网站访问最频繁的部分使用缓存 虽然大家都知道这个概念,但大家在做项目的时候不一定都思考过如何以及何时使用缓存。 我们来看看这个开源系统的这个设置:对于如何选择这个两项,似乎没什么太难理解的,这里是决定把对module的缓存放在内存里还是放在硬盘里,当然,选择"Memory"会提高速度。但有一点是我们要学习的,那就是为什么会有这么一个选择。之所以出现这样一个选择,是因为这个开源系统的设计人员发现这个系统对于module这一部分的操作特别频繁,所以对于所有读取出的module信息都会放入缓存,从而加快系统的速度,也就是说,设计人员主动的分析了系统的特点,使用了缓存,这是最值得我们学习的地方。   阅读全文

[新闻]美国宇航局成功测试星际互联网
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
Windows Mobile Ink
Thu, 20 Nov 2008 15:18:00 GMT
摘要: Windows Mobile Ink是Windows Mobile 6 Professional 和 Windows Mobile 6 Classic上Ink的服务平台。它提供Ink收集、数据管理、渲染和识别,同时也提供Ink Controls来支持记笔记的应用场景。  阅读全文

[新闻]后“开放”平台时代
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
"千里之堤毁于蚁穴"----一次性能调校有感
Thu, 20 Nov 2008 14:14:00 GMT
摘要: 公司有个系统A,最近忙着验收测试,但测了个把月,由于性能不理想,客户不同意验收。 前些天负责那系统的一个兄弟和我谈到性能很难整,我恰好也对这个系统比较感兴趣。于是大致浏览一下,不得不佩服该系统的UI; 清爽,漂亮,看起来非常大气 全程Ajax,几乎不刷新界面 最神奇的是功能似乎比客户端软件还强,可以拖拽数据到树,可以右键处理一些事务,可编辑表格那是基本功能 [问题出现] 我迫不及待的想知道该系统  阅读全文

[新闻]李彦宏首次表态竞价排名问题:有错能改善莫大焉
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
visio二次开发___事件篇___事件编程
Thu, 20 Nov 2008 13:28:00 GMT
摘要: 本文主要介绍了如何注册Visio事件,处理相应事件通知,以及再次抛出事件等过程。并给出了部分源码,抛砖引玉,希望大家提出自己的高见。Visio二次开发的事件编程主要分为四个步骤:首先,需要创建visio事件代理和visio事件处理类,并添加需要处理的事件;其次,对需要处理的事件向对象进行注册;再次,需要实现事件处理类的事件处理方法;最后,根据接收到的事件通知,判断其事件代码、事件源、作用对象、事件ID等参数,来触发相应的需要处理的事件。  阅读全文

[新闻]杨致远发表博客解释辞职原因
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
编程方式读取X.509证书吊销列表(CRL)(一)应用Bouncy Castle Crypto
Thu, 20 Nov 2008 13:25:00 GMT
摘要: X.509 结构的证书被吊销后,序列号会出现在Certificate Revocation List (CRL) 中,我们可以将它另存为一个.crl的文件,就能够查看被吊销的证书信息,但.NET Framework并没有提供可对Crl进行属性访问的类(Java中提供了X509Crl),要实现这样的功能,我们得借助.NET框架之外的技术:Bouncy Castle Crypto或者Mono SDK。  阅读全文

[新闻]微软公布免费安全软件计划
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
URL的传递字符串问题小研究(续)
Thu, 20 Nov 2008 13:21:00 GMT
摘要: 前两天弄这个字符串在Url中传递的过程,还遇到给个问题,当时忘了写下来,今天提出来大家思考下,希望能够帮我解惑。我把字符串直接UrlEncode()编码,不替代“+”,传递到另一个页面,我跟踪了下,第二个页面接刚接到时字符串是正确的,但是把它UrlDeconde()后,加号就变成空格去了。如下:1.页面上都是一致的,第一页面的后台代码:CodeCode highlighti  阅读全文

[新闻]《时代》:杨致远被Google玩弄于股掌之间?
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
基于文法分析的表达式计算器的实现
Thu, 20 Nov 2008 12:20:00 GMT
摘要: 这个基于LL分析器的计算器是大三时上编译原理的一个作业。感觉是自己做过相对比较有深度的一个程序。第一次放出来跟大家分享。希望多多指教。这个计算器支持带括号的四则运算和乘方运算。具体实现过程如下:词法分析器: 相关正则定义: DIGIT [0-9] NUMBER {DIGIT}((.{DIGIT}+)|{DIGIT}*) DELIM [ \t\n] OPERATOR [+|-|*|/|^|(|)|=  阅读全文

[新闻]Mozilla即将结束对FireFox 2的支持
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
人工神经网络(Artificial Neural Netwroks)笔记-模拟退火算法(Simulated Annealing)
Thu, 20 Nov 2008 11:48:00 GMT
摘要: 在 人工神经网络(Artificial Neural Netwroks)笔记-消除样本顺序的BP算法 一文的下面提到了几个要讨论的问题 其中 “局部极小点问题,如何逃离或者避开局部极小点呢?”这个问题可以通过模拟退火算法(Simulated Annealing) 来提高逃离局部极小点向全局最优点进发的可能性。人工神经网络(Artificial Neural Netwroks)笔记-粒子群优化(Pa  阅读全文

[新闻]IBM"走鹃"险胜"Cray Jaguar" 连任世界最快超级计算机
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
基于无锁的C#并发队列实现
Thu, 20 Nov 2008 10:32:00 GMT
摘要: 最近开始学习无锁编程,和传统的基于Lock的算法相比,无锁编程具有其独特的优点,Angel Lucifer的关于无锁编程一文对此有详细的描述。无锁编程的目标是在不使用Lock的前提下保证并发过程中共享数据的一致性,其主要的实现基础是CAS操作,也就是compare_and_swap,通过处理器提供的指令,可以原子地更新共享数据,并同时监测其他线程的干扰,.Net中的对应实现是InterLocked  阅读全文

[新闻]微软正式发布Exchange/SharePoint Online
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
SQL2005缓存计划小结
Thu, 20 Nov 2008 09:22:00 GMT
摘要: 缓存计划可以被分成两类:编译的计划和执行上下文。前者是对所有用户共享的,后者是针对某个特定用户的,它包含了某个用户执行此计划时的具体参数等相关的信息。编译的计划有四种类型,可以通过下面的语句进行查看:CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/  阅读全文

[新闻]应用程序架构指导包2.0 Beta 2发布
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
虚拟主机实现“泛解析”解决方案
Thu, 20 Nov 2008 09:04:00 GMT
摘要: 文章伊始,我先要说明本文提到到的“泛解析”,不是真正意义上的泛解析,而是在虚拟主机中模拟泛解析以实现一个虚拟主机跑多个网站或实现将子目录转换为二级域名的目的!一、类似解决方案及其优缺点:1、利用微软提供的URLRewriter.DLL及ActionlessForm.DLL实现URL重写和表单Action属性修改。此方案仅支持对请求的PATH部分进行解析重定向,没法实现对HO  阅读全文

[新闻]推波助澜 微软推出“I'm a PC”商店
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
在服务器端保存ViewState
Thu, 20 Nov 2008 08:51:00 GMT
摘要: 1.比较Asp.net 的一个强大的功能就是ViewState, 但是这也成为很多人诟病的地方,我们先来看一个实例ViewState其中一个特性就是保存页面的状态,下面我们看一个很简单的登录页面。(1) 默认的页面存储下面两幅图是使用默认的ViewState, Asp.net把状态保存在页面的一个Hidden控件里。每次请求时往返于客户端与服务器之间,我们可以看到储存了很多的值,页面大小是28.2  阅读全文

[新闻]火狐中国版正式发布
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
GDI+中常见的几个问题(9)
Thu, 20 Nov 2008 07:15:00 GMT
摘要: 昨天晚上看了Heroes第9集,Eclipse又要来了,激动中。今天来讲讲上个星期遗留下来的东西:ColorMatrix。9. Color Matrix图像的本质是什么?对不同的人来说这是不同的东西。在计算机的世界中,啥东西都是数据,图像也是一种数据。从自然界的光变成计算机的数据,需要通过采样和量化的处理。图像在计算机中,其实是一个二维数组,从数学上来说,这其实是一个矩阵。图像中的每一个点都是个四  阅读全文

[新闻]微软:中国移动全球率先使用IE Mobile 6
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
LCS2005发送消息通知
Thu, 20 Nov 2008 06:46:00 GMT
摘要: 做开发时参考了http://www.cnblogs.com/cleo/archive/2005/12/29/lcs_webservice.html来做的!使用RTC的SDK来进行消息的发送!编程步骤:1.请安装同时1.2和1.3 ,安装完下载后的MSI包之后,而且要运行 :\Program Files\RTC Client API v1.2 SDK\INSTALLATION\RtcApiSetup  阅读全文

[新闻]消息汇总:迅雷人事变动 员工与公关部说法大相径庭
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
HTML在线编辑器(163邮箱、sina博客、qq邮箱)
Thu, 20 Nov 2008 05:51:00 GMT
摘要: 一、163邮箱编辑器 暂停下载二、sina博客编辑器 暂停下载三、qq邮箱编辑器 暂停下载asp版|暂停下载php版  阅读全文

[新闻]Google iPhone语音识别程序已经上线
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
移动应用的三个维度
Thu, 20 Nov 2008 05:26:00 GMT
摘要: 作者:马宁如果问大家互联网是几维的?不知道大家的答案是什么。如果再问Web 2.0是几维的?移动应用是几维的?大家会不会以为我疯了?这是我最近在思考的问题。通常的维度是指我们所处空间,是由长宽高组成的,也就是我们所说的三维,之后由加上了时间轴,成为了思维空间。那么互联网的维度是什么呢?在互联网中讨论长宽高显然是没有意义的,谁知道新浪或搜狐的空间位置吗?所以,我认为,传统的网站是一维空间,只有时间轴  阅读全文

[新闻]为何Apple更精于UI设计 ?
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
我的第一次策划实践(二)
Thu, 20 Nov 2008 05:01:00 GMT
摘要: 我的第一次策划实践(二)初入目录分析之门一本书,目录结构的好坏往往直接决定了读者对本书的价值评判。小编第一次拿到这种大部头的书稿(接近700页),蜡笔小王(王翔的id)也是第一次写书,我就决定先从整理目录开始入手。最初,蜡笔小王并没有提交给我们完整的目录文档,于是我就根据他的每一章的书稿标题,整理出了第一版目录。但第一版目录还只是一些标题的罗列,没有层级的区别,作者虽然规划了7个section,却  阅读全文

[新闻]全球最快计算机排名 上海“魔方”进前十
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
中国最早的"云平台"---刘邦手下的"谋臣武将"
Thu, 20 Nov 2008 04:40:00 GMT
摘要: 声明:最近一直想写篇关于云计算(及云存储)方面的文章,好把我个人对于当下“云”的一些理解说出来。考虑目前网上的文章,视频BLOG介绍这方面的内容已有不少。另外在园子里的Anytao也开始写有关方面的系列文章,我不想再写那方面的东西了,就把希望就全放在Anytao的那个系列上吧。目前网上关于云计算的文章都是立足当下,放眼未来。而我这篇则把视角倒退回两千多年以前的“楚汉相争”时期,在那时的政治舞台上只有两个利益集团(不是google和微软,呵呵)。这两个集团的核心人物分别是刘邦(汉高祖)和楚霸王项羽。   阅读全文

[新闻]百度股价大跌25%
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
Javascript之回到过去 论window.location.href = window.location.href刷新页面的问题
Thu, 20 Nov 2008 04:01:00 GMT
摘要: 在JS中可以用window.location.href = window.location.href来刷新页面(当然还有很多其他的方法),在使用这个方法刷新页面的时候回出现问题,如下:CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><bo  阅读全文

[新闻]杨致远将辞去雅虎CEO职务
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
VisualState“视图状态”使用心得
Thu, 20 Nov 2008 03:54:00 GMT
摘要:   阅读全文

[新闻]2008年11月18日科技博客精选
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
WinHEC 之盖茨编年史期待 WinHEC 2008 China
Thu, 20 Nov 2008 03:42:00 GMT
摘要: 说起比尔盖茨可谓是我们心目中真正的传奇,如果没有他,相信我们这些做微软技术的人也不能在博客园汇聚,借此WinHEC 2008召开之际,系数这些年盖茨在WinHEC的事件,我谨整理 WinHEC 2000 到 WinHEC 2008,希望大家能从本文看到盖茨的风采。  阅读全文

[新闻]闲钱撤退 国外LP拟转让国内PE股权
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
MS SQL大值数据类型varchar(max)、nvarchar(max)、varbinary(max)
Thu, 20 Nov 2008 02:36:00 GMT

在MS SQL2005及以上的版本中,加入大值数据类型(varchar(max)、nvarchar(max)、varbinary(max) )。大值数据类型最多可以存储2^30-1个字节的数据。

这几个数据类型在行为上和较小的数据类型 varcharnvarcharvarbinary 相同。

微软的说法是用这个数据类型来代替之前的textntextimage 数据类型,它们之间的对应关系为:

varchar(max)-------text;

nvarchar(max)-----ntext;

varbinary(max)----image.

 

有了大值数据类型之后,在对大值数据操作的时候要比以前灵活的多了。比如:之前text是不能用‘like’的,有了varchar(max)之后就没有这些问题了,因为varchar(max)在行为上和varchar(n)上相同,所以,可以用在varcahr的都可以用在varchar(max)上。

另外,这个还支持对插入的删除的表中的大值数据类型列引用上使用 AFTER 触发器。text就不行,总之,用了大值数据类型之后,我是“腰也不疼了,腿也不酸了,一口气也能上六楼了”。还等什么呢,快用大值类型吧。

 



[新闻]商刊:内嵌整合是即时通讯未来发展趋势
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
基于操作+角色的授权方案设计与实现
Thu, 20 Nov 2008 01:19:00 GMT
摘要: 微软的forms授权是基于角色和用户的,这样可以很容易的限定那些用户,角色可以访问某个页面目录的权限。但是正如需求工程讨论的,有时候客户很不容易满足,现在我的客户要求系统允许他们自己可以定义角色可以做那些操作,也就是说角色可以做什么是可定义的用户随时可以修改的,这样如果使用微软的forms认证就实现不了了,我们不可能在用户每次自定义了角色的操作权限之后,都去修改一次web.config中的定义,怎么办?   阅读全文

[新闻]今日财报
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
WinForms开发人员的WebForms开发总结。
Wed, 19 Nov 2008 16:17:00 GMT
摘要: 作者:黄启清(www.cnblogs.com/happyqq) 个人网站:http://mama520.cn 日期:2008-11-20 写这篇文章,我感觉确实有点是班门弄斧的感觉。(WEB开发人员可以略过)我这个一直以来都很专注WinForms开发的人一下子跑WebForms开发了,说实话,我除了在网络安全研究方面时去看看WEB程序,还真没开发过什么大型WEB项目。^_^好了,接下来,我就聊聊W  阅读全文

[新闻]百度回应央视曝光问题:我们表示真诚的歉意
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
我的局部刷新
Wed, 19 Nov 2008 16:07:00 GMT
摘要: 关于.net里局部刷新的一些看法,还有就是自己做的局部刷新 感觉自己写的局部刷新更有效率.  阅读全文

[新闻]Silverlight 3一瞥
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================
使用微软分布式缓存服务Velocity Part 1
Wed, 19 Nov 2008 16:01:00 GMT

概述

Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的缓存服务器。Velocity也将集成在.NET Framework 4.0中,本文将介绍Velocity的一些预备知识、安装配置以及开发一个简单的示例。

简介

既然是分布式的缓存平台,客户端应用程序能够与缓存服务器集群中的任何一台服务器通信,并且执行缓存操作,如新增缓存项,移除缓存项等。在Velocity中,提供了一套统一的API,开发者可以使用任何一种.NET语言来访问这些API,如图1所示:

TerryLee_0212

图 1

物理模型

在整个Velocity分布式缓存解决方案中,从物理模型上来看,主要涉及到如下几个元素:缓存宿主,缓存集群,Velocity提供的基于Windows PowerShell的管理工具,对于服务器集群配置的存储。缓存宿主是指一个或者多个以Windows服务形式运行的服务器,每台服务器都可以运行缓存宿主服务;缓存集群是一个或者多个缓存宿主实例的集合;当缓存集群启动时,它将从集群配置存储位置处来获取配置信息,Velocity提供了多种方式的集群配置信息存储,可以基于XML文件、SQL Server数据库或者SQL Server CE等;基于PowerShell的管理工具后面会详细讲到。 如图2所示:

TerryLee_0213 

图 2

逻辑模型

从逻辑模型上来看,在Velocity中主要有命名缓存,在命名缓存中我们还可以继续分区,命名缓存,可以理解为内存中的一个独立的存储结构单元,它们之间完全互相隔离,互不干扰,当有多个应用程序共享同一个缓存集群时,可以为每个应用程序分别建立命名缓存;在同一个命名缓存中,还可以对命名缓存进行分区,这样即可以解决数据冲突的问题,再配合Velocity中的“标签”功能,可以极大的提高检索效率。如图3所示:

TerryLee_0216  

图 3

安装

Velocity当前最新的版本是CTP 2,大家可以到微软官方站点下载,由于Velocity中提供了一套基于Windows PowerShell的管理工具,所以在安装之前需要首先安装Windows PowerShell。在安装过程中,其中有一步需要进行服务器集群的配置,如图4所示:

TerryLee_0214

图 4

需要设置服务及集群端口号,集群配置的存储位置,集群配置存储的Provider,可以基于XML存储或者基于SQL Server CE存储等。另外可以访问如下站点获得一些资源:

团队博客:http://blogs.msdn.com/velocity/ 

示例代码:http://code.msdn.microsoft.com/velocity

安装完成后,请在Windows Service中启动Microsoft project code named "Velocity"服务。

管理工具

Velocity提供了基于Windows PowerShell的管理工具,对于Windows PowerShell不熟悉的可以参考《回归Dos操作的快感,进入PowerShell世界》这篇文章。使用Windows PowerShell可以非常方便的对Velocity缓存集群、缓存宿主等进行管理。使用如下命令金额图对启动、停止、重启服务器集群:

Start-CacheCluster 
Stop-CacheCluster 
Restart-CacheCluster 

使用如下命令可以启动、停止缓存宿主、获取命名缓存、获取缓存分区等:

Get-CacheHost 
Get-CacheConfig 
Set-CacheConfig 
Start-CacheHost 
Stop-CacheHost 
Get-CacheStatistics 
Get-Cache 
Get-CacheRegion 

如使用Get-CacheHost命令获取缓存宿主的信息,如图5所示,可以看到宿主对应的服务名以及服务状态等:

TerryLee_0217

图 5

使用Get-Cache命名查看所有的命名缓存,如图6所示:

TerryLee_0218

图 6

使用该管理工具还可以创建、移除命名缓存等,这里不再叙述。

简单示例

经过前面一大堆的理论介绍,现在来看一个最简单的示例。首先要把CacheBaseLibrary和ClientLibrary这两个程序集添加到应用程中,在Velocity安装目录下可以找到,并且引入命名空间:

using System.Data.Caching;

在使用Velocity缓存数据时,首先需要创建一个命名缓存,它可以通过CacheFactory来创建,如下代码所示:

private Cache GetCurrentCache()
{
    Cache dCache;
    ServerEndPoint[] servers = new ServerEndPoint[1];
    servers[0] = new ServerEndPoint("localhost", 22233, "DistributedCacheService");
    bool routingClient = true;
    bool localCache = false;
    var factory = new CacheFactory(servers, routingClient, localCache);
    dCache = factory.GetCache("default");

    return dCache;
}

此处首先指定了所有的服务器信息,当然这些都可以放在应用程序配置文件中,将会在下篇中介绍,有了Cache对象,其它的使用就非常方便了,如我们可以使用Add、Put、Remove、Get等方法来对缓存项进行操作,

添加缓存项:

Cache dCache = GetCurrentCache();

String key = keyTextbox.Text;
String val = valueTxtBox.Text;

if (key == "" || val == "") return;

dCache.Add(key, val);
statusLabel.Text =
    String.Format("Successfully added key {0} to cache.", key);

获取缓存项:

Cache dCache = GetCurrentCache();
String key = keyTextbox.Text;

if (key == "") return;

String val = dCache.Get(key).ToString();
valueTxtBox.Text = val;
statusLabel.Text =
    String.Format("Successfully did Get of key {0} from cache", key);

运行程序可以测试,数据被正确的缓存,如图7所示:

TerryLee_0219

图 7

总结

本文简单介绍了微软的分布式缓存解决方案Velocity的一些概念以及开发了一个简单的示例,希望对大家有用。在下篇文章中,我们将会更深入学习缓存复杂数据类型以及Velocity的编程模型和配置模型。

相关文章:

1. 使用微软分布式缓存服务Velocity Part 2



[新闻]Google编程挑战赛清华学生包揽冠亚军
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
====================================================================================