.net缓存更新,用什么技术?

flyingdream123 2018-05-11 06:15:36
做了一个会员管理系统,比如我在系统启动时,把全部员工的资料加载到内存,但是当有用户新增或修改了员工资料,保存数据后后怎么去触发更新缓存方法?简单点说就是数据库的数据发生了变化,怎么去通知客户端。更深入一点就是,数据库表记录变更后,立即通知WCF,WCF再通知客户端,去拿最新的数据?
...全文
827 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
举个例子,假设提供一个电商平台读取小店店主的api功能,例如
public 店主 Search(string id)
{
    var key = "小店店主信息:"+ id;
    var cache = System.Runtime.Cache;
    var result =(店主)cache[key]
    if(result == null)
    {
        result = 读取数据库加载店主资料(id);
        cache.Insert(key, result);
    }
    return result;
}
这里的 cache.Insert 其实第 3、4、5 个参数才是缓存技术,而 cache.Insert 只是一个最基本的入门概念。从参数 3 开始,可以控制缓存的最长存活时间、是从创建时计时还是从最后一次访问后计时,是根据文件修改来自动清除还是根据数据库表的修改来自动清除这个 result 缓存单元,或者根据别的缓存单元的改变而自动级联地清除缓存。 懂得缓存的CacheDependency 设计才是懂的缓存设计,也就是说缓存设计的技术点在于你关心的这类“清除缓存”的技术上。那么假设一个系统有1000万小店主以及员工信息,平常还存在内存里的(上述 Search 方法缓存到内存里的)对象也不过只有几十个、几百个,怎么可能吧1000万人员信息不断地 copy 到内存里边来呢?
  • 打赏
  • 举报
回复
缓存设计是 k-v 式的,不管是使用 .net 内置的本地 cache 还是使用外部数据库例如 redis 之类的(这通常是为了维持全网多个服务器唯一缓存,而牺牲了一点通讯性能),技术概念的出发地是 k-v 式地设计。刚学编程没有几年的人容易满脑子只有“增删改查”,目标是全部数据库数据表。如果你意识到需要缓存,那么就意味着你意识到性能、大数据是一个竞争优势。但是这个时候技术上就必须更新换代,软件架构的设计从面向数据库表,要改为面向缓存“单元”来设计整个程序流程,这样才能用几百K、几兆缓存来抗住几G、几十G的数据访问。绝不是说把数据库弄到内存里就是缓存。
圣殿骑士18 2018-05-12
  • 打赏
  • 举报
回复
区区一个会员管理系统,为何有必要将会员信息加载到内存?而不可以随用随取? 我认为你设计是有问题的,过分追求缓存的体验,而忽略了整体架构的合理性。
  • 打赏
  • 举报
回复
比如说某个游戏中用户a要把信息发给b,那么a首先要查询b分别在哪些游戏室,然后找一个(其中任何一个服务器)节点把消息推给b。即使是同一个进程,完全可能有些查询结果在程序前后都被重用,但是编程时并不清楚一定要在哪里重用、重用几次、是不同线程还是同一个线程需要重用,都会大量使用缓存技术。所以其实缓存是专业程序员的一种标志性的特性(否则就只知道增删改查数据库、而不会用缓存)。那么缓存大量使用,这就需要缓存设计讲究命中率,并不是把只有万分之一命中率的东西反复地在内存和数据库之间“抖动地”来回拷贝,而是仅仅缓存几十个对象就能抗住——隐藏——对数据库的上万次重复查询。 所以缓存,绝不是把数据表里的数据随便扔到内存里。
  • 打赏
  • 举报
回复
短连接 你就轮训吧 3秒钟请求一次
  • 打赏
  • 举报
回复
WebSocket ,只能长连接,短连接做不了

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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