111,098
社区成员




cache.Insert("13998号订单最后更新时间", item);
那么你就可以将其他一些缓存数据与之关联,例如cache.Insert(key, data, new CacheDependency(null, new string[]{"13998号订单最后更新时间"}));
这样,当第一个缓存单元的数据改变的一刹那,第二个缓存单元(以及同样依赖“13998号订单”的其它几十个缓存单元)就自动清除了!你可以想象到,这种依赖是可以级联的。
那么现在就是你的A数据要广播消息的问题。不是说数据库只要一有改变就广播,数据库的改动只有万分之一、十万分之一的消息才需要广播。例如假设所有的订单改变都需要广播一下,那么就单独将这个信息广播一下。
最后回到前边关键的一个关键点,所谓“内存数据库”算是缓存吗?当你单独弄一个服务器然后安装一个内存数据库,你所有的数据都要写到这个内存数据库上,然后再每一此查询数据时先去通过网络查询一次这个内存数据库,如果查不到的话再去查询数据库系统,这算是缓存吗?这时候你根本没有缓存,许多人把这个叫做缓存,那是许多人(主要是使用 java 的 没有 .net cache技术的低级工具的人)在众口一词地在歪曲概念呢。
那根本不是缓存技术,就是普通的内存数据库,而已。[/quote]
明白。3Qcache.Insert(key, arr, new System.Web.Caching.CacheDependency(dir.FullName));
第三个参数才是缓存技术最终要追求的目标。尽量少使用内存、尽量没有多余数据,才是缓存的目标。private JArray CmdDir(DirectoryInfo dir)
{
var cache = HttpRuntime.Cache;
var key = string.Format("目录 {0} 的文件列表", dir.FullName);
var arr = (JArray)cache[key];
if (arr == null)
{
arr = new JArray();
foreach (var f in dir.EnumerateFiles())
{
var obj = new JObject();
obj.Add("name", f.Name);
obj.Add("md5", Convert.ToBase64String(Common.CommonExtensions.MD5(f)));
obj.Add("length", f.Length);
arr.Add(obj);
}
cache.Insert(key, arr, new System.Web.Caching.CacheDependency(dir.FullName));
}
return arr;
}
然后写
var target = Request.QueryString["dir"];
context.Response.ContentType = "text/json";
context.Response.Write(CmdDir(target).ToString());
这里,每一次查询参数 dir 被作为缓存key。而不是什么把网站的所有可能用来输出的内容目录的文件列表都放到什么“缓存”中。
缓存单元应该是很小的、很细的,你一次要都写的是整个缓存单元中的全体数据而不是一丁点数据。如果你实际上是对所谓的“数据库表”去纠结什么缓存,如果你只是要读写数据表中的一丁点数据,那么你就适合使用内存数据库服务器架构,而不是缓存技术。cache.Insert("13998号订单最后更新时间", item);
那么你就可以将其他一些缓存数据与之关联,例如cache.Insert(key, data, new CacheDependency(null, new string[]{"13998号订单最后更新时间"}));
这样,当第一个缓存单元的数据改变的一刹那,第二个缓存单元(以及同样依赖“13998号订单”的其它几十个缓存单元)就自动清除了!你可以想象到,这种依赖是可以级联的。
那么现在就是你的A数据要广播消息的问题。不是说数据库只要一有改变就广播,数据库的改动只有万分之一、十万分之一的消息才需要广播。例如假设所有的订单改变都需要广播一下,那么就单独将这个信息广播一下。
最后回到前边关键的一个关键点,所谓“内存数据库”算是缓存吗?当你单独弄一个服务器然后安装一个内存数据库,你所有的数据都要写到这个内存数据库上,然后再每一此查询数据时先去通过网络查询一次这个内存数据库,如果查不到的话再去查询数据库系统,这算是缓存吗?这时候你根本没有缓存,许多人把这个叫做缓存,那是许多人(主要是使用 java 的 没有 .net cache技术的低级工具的人)在众口一词地在歪曲概念呢。
那根本不是缓存技术,就是普通的内存数据库,而已。