微软企业级缓存

寂空冷 2015-09-28 09:14:01
各位大神,用微软的企业级缓存HttpRuntime.Cache,千万级数据,表大概在50个的样子,表字段在30个以内,服务器内存大概要多大?
...全文
189 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
寂空冷 2015-09-28
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
你只说了千万级,但你没说你条记录大概占用多少空间,你本机可以模拟一定量,然后按曲线比例预估,另外httpruntime.cache只是约定了一个缓存方案,然后微软默认提供了memorycache,你也可以实现分布式缓存,具体怎么实现在博客园有相应文章,如果要缓存的数据要以g为单位的话,memorycache肯定是会出篓子的,别忘了你的内存不是仅仅只给缓存用的
我刚进这家公司,目前别人已设计好表格,没有真实数据,所以我也不知道每条记录大概占用多少空间,我去找找博客园的文章看看,感谢! PS:这个功能主要是为了对比修改前后修改后的字段值比对,有差异的记录日志,我暂时只想到了,更新前去获取一次最新数据,但是这样每次都要获取,感觉不太好,有木有更好的方案?
  • 打赏
  • 举报
回复
你只说了千万级,但你没说你条记录大概占用多少空间,你本机可以模拟一定量,然后按曲线比例预估,另外httpruntime.cache只是约定了一个缓存方案,然后微软默认提供了memorycache,你也可以实现分布式缓存,具体怎么实现在博客园有相应文章,如果要缓存的数据要以g为单位的话,memorycache肯定是会出篓子的,别忘了你的内存不是仅仅只给缓存用的
寂空冷 2015-09-28
  • 打赏
  • 举报
回复
引用 1 楼 moonwrite 的回复:
千万级数据 自己加载一次看看,不就知道了~
没服务器给我测试...有的话自己搞了,我自己机器卡...
moonwrite 2015-09-28
  • 打赏
  • 举报
回复
千万级数据 自己加载一次看看,不就知道了~
  • 打赏
  • 举报
回复
不够人性 --> 不够任性 一个原本占用内存40M的网站服务系统,你高效率地使用到缓存,将主要功能的服务速度平均提高20倍,可能这个服务说不定也不过占用了45M内存而已。而不是你认为的需要有多大的内存才能撑起来的。 这是因为正确地用了缓存设计,而不是滥用内存。
  • 打赏
  • 举报
回复
引用 2 楼 lihui398 的回复:
[quote=引用 1 楼 moonwrite 的回复:] 千万级数据 自己加载一次看看,不就知道了~
没服务器给我测试...有的话自己搞了,我自己机器卡...[/quote] 几百M内存,照样缓存,得到缓存设计的足够好处。缓存系统会自动丢掉数据的。而你其实是要弄一个内存数据库,还不是缓存概念。所以才会嫌自己的机器不够人性,不够挥霍内存。根本原因,这不是搞缓存呢!
寂空冷 2015-09-28
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
你的数据库只有一个进程用,而绝不会另外被改变数据? 把整个表放入缓存,那其实就是滥用缓存的。缓存利用率这么低,那是多么奢侈的事情啊。 缓存中应该放的是比较前端的东西,例如根据某个sql语句的查询结果,那么只要这个sql语句涉及的数据库表没有改变,这个sql语句的查询就不会改变,因此就可以放到缓存里。 并不是放整个数据表。 例如csdn的首页,假设是这样的 sql 语句: select top 40 ....n个字段里列表..... from [帖子] where [1级栏目]='.NET‘ order by [最后更新时间] desc 你可以用它或者它的md5作为缓存的key,用查询结果(序列化为实体对象集合)作为value,保存到缓存集合中。这样就能对于重复几千次的查询,直接返回“查询结果”而无须查询数据库了。 这里并不是把什么 [帖子] 表里的几千万条帖子放到缓存里,而是仅仅放40条而已。 而且不同的缓存单元,完全可能有从相同的表中查询的记录。因为缓存技术根本不纠结数据库表,而是真正从前端查询出发来缓存的。 那种纠结于数据库表、把数据库表放到缓存中的做法,其实不叫做缓存。叫做“内存数据库”。把它叫做“缓存”的人往往都是图省事,任性地滥用内存,糊弄老板和投资人的。那就是在背后的关系数据库之前再弄一层“内存数据库”额外机制,而不是缓存概念。
有道理,我也想过用内存数据库Redis,不过这个网站的服务器貌似只给一台。
  • 打赏
  • 举报
回复
另外,对于进程中的缓存机制,最终要、最有内涵的是“缓存依赖项”的设置技术。当一个表的数据被改变了、或者一个文件改变了,或者一个缓存单元的数据被改变了,那么就应该像“雪崩一样”地引起所有依赖于它的其它n个缓存单元自动清空。而不是仅仅会去设置 Duration。 只知道设置定时时间长度的人,那是不太懂缓存控制的,十有八九还是在用缓存当内存数据库去玩儿。 设计缓存策略,一定是以控制缓存依赖项为提纲、为技术关键门道。看这个就能看出缓存技术应用的高低。而看其它粗浅的概念则是只看“热闹”不看“门道”的。 即使是服务器集群,当一个业务服务器上更新了某个人的信息时,它也可能要将一个通用的“缓存依赖项改变”消息复制式地发给其它所有服务器,这样其它服务器上就会改变自己的这个依赖项下的缓存单元的值(例如就是“最后修改时间”),而这个改变就会雪崩一样地自动被其它缓存单元捕获而自动清空它们。这样当出现同样sql语句的查询时,这个服务器就会到数据库服务器上去查询了,并且重新在本地进程中把最新查询结果缓存起来。 看缓存依赖项策略设计,能看出缓存系统设计的门道。没有这个,就等于没有缓存,或者是欺骗性地用内存数据库来当作缓存。
  • 打赏
  • 举报
回复
另外,对于进程中的缓存机制,最终要、最有内涵的是“缓存依赖项”的设置技术。当一个表的数据被改变了、或者一个文件改变了,或者一个缓存单元的数据被改变了,那么就应该像“雪崩一样”地引起所有依赖于它的其它n个缓存单元自动清空。而不是仅仅会去设置 Duration。 只知道设置定时时间长度的人,那是不太懂缓存控制的,十有八九还是在用缓存当内存数据库去玩儿。 设计缓存策略,一定是以控制缓存依赖项为提纲、为技术关键门道。看这个就能看出缓存技术应用的高低。而看其它粗浅的概念则是只看“热闹”不看“门道”的。 即使是服务器集群,当一个业务服务器上更新了某个人的信息时,它也可能要将一个通用的“缓存依赖项改变”消息复制式地发给其它所有服务器,这样其它服务器上就会改变自己的这个依赖项下的缓存单元的值(例如就是“最后修改时间”),而这个改变就会雪崩一样地自动被其它缓存单元捕获而自动清空它们。这样当出现同样sql语句的查询时,这个服务器就会到数据库服务器上去查询了,并且重新在本地进程中把最新查询结果缓存起来。 看缓存依赖项策略设计,能看出缓存系统设计的门道。没有这个,就等于没有缓存,或者是欺骗性地用内存数据库来当作缓存。
  • 打赏
  • 举报
回复
你的数据库只有一个进程用,而绝不会另外被改变数据? 把整个表放入缓存,那其实就是滥用缓存的。缓存利用率这么低,那是多么奢侈的事情啊。 缓存中应该放的是比较前端的东西,例如根据某个sql语句的查询结果,那么只要这个sql语句涉及的数据库表没有改变,这个sql语句的查询就不会改变,因此就可以放到缓存里。 并不是放整个数据表。 例如csdn的首页,假设是这样的 sql 语句: select top 40 ....n个字段里列表..... from [帖子] where [1级栏目]='.NET‘ order by [最后更新时间] desc 你可以用它或者它的md5作为缓存的key,用查询结果(序列化为实体对象集合)作为value,保存到缓存集合中。这样就能对于重复几千次的查询,直接返回“查询结果”而无须查询数据库了。 这里并不是把什么 [帖子] 表里的几千万条帖子放到缓存里,而是仅仅放40条而已。 而且不同的缓存单元,完全可能有从相同的表中查询的记录。因为缓存技术根本不纠结数据库表,而是真正从前端查询出发来缓存的。 那种纠结于数据库表、把数据库表放到缓存中的做法,其实不叫做缓存。叫做“内存数据库”。把它叫做“缓存”的人往往都是图省事,任性地滥用内存,糊弄老板和投资人的。那就是在背后的关系数据库之前再弄一层“内存数据库”额外机制,而不是缓存概念。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧