社区首页 >问答首页 >如何处理缓存的实体框架数据

如何处理缓存的实体框架数据
EN

Stack Overflow用户
提问于 2015-03-17 00:47:29
回答 1查看 933关注 0票数 0

我目前正在使用实体框架(),并且有下面的场景需要管理,然而,由于幕后发生的事情很多,我不完全确定最好的路线是什么,而谷歌到目前为止还没有提供必要的答案。

我有大约100个产品在一个产品/供应商风格的数据库。大约有10个表在每个页面上被多次使用--因为小部件等等。

我目前缓存的结果(这100个产品),加上其他核心实体,以执行大约80%的查询,我需要。

但是,有时我需要访问扩展的数据。假设产品特性--它们只出现在产品页面上--因此可以根据需要访问,而不是永久缓存。这里是我的想法大声说,我会感谢任何意见和建议。

  1. 简单,但可能最糟糕的答案是将它们与原始实体一起放在缓存中。虽然数据不会太难处理,但它将对缓存的数据大小产生重大影响。
代码语言:javascript
代码运行次数:0
复制
- 100 products x 10 features - suddenly becomes 1000. Does this become inefficient very quickly?

  1. 我可以查询缓存的对象以获得我需要的产品,然后重新附加到数据库。我不确定这背后的机制,因为我从一个缓存的实体开始,它可能会变得非常混乱,很快。
  2. 我可以只查询我需要的产品,根据需要提供所有额外的数据。这将涉及查询相当多的表,但只涉及单个产品、10个产品详细行、10个特性行等。

感谢您的所有意见和建议。

EN

回答 1

Stack Overflow用户

发布于 2015-03-17 02:17:16

在缓存值时,我总是使用AsNoTracking()将这些值从EF上下文中分离出来。

关于您应该缓存多少信息的问题取决于访问频率和如果信息不存在的话检索信息的成本。我通常使用.NET或Azure提供的缓存方法,因为它们跟踪内存消耗情况,并导致条目在很长一段时间内不被访问时被卸载。msdn上的一个轻微的旧文章很好地解释了ASP.NET缓存机制。

我通常使用抽象类隐藏缓存细节,并使用特定类型的具体实现:

代码语言:javascript
代码运行次数:0
复制
public sealed class CustomerIdCache : AbstractCache<CustomerIdCache, Customer>
{

    private CustomerIdCache()
    {

    }

    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    protected override TimeSpan GetExpiration()
    {
        return new TimeSpan(0, 1, 0, 0);
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="db"></param>
    /// <param name="key"></param>
    /// <returns></returns>
    /// <exception cref="ArgumentException"></exception>
    protected override Customer GetSingleElement(ITimeJackContext db, object[] key)
    {
        Guid id = (Guid)key[0];
        Customer customer = db.Customers.AsNoTracking().SingleOrDefault(x => x.Id == id);
        return customer;
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="entry"></param>
    /// <returns></returns>
    protected override IEnumerable<object> GetKey(Customer entry)
    {
        return new object[] { entry.Id };
    }

用法:

  1. 从缓存中检索信息(如果不存在,将从db加载) CustomerID =.;Customer customer = CustomerIdCache.Instance.Get(Db,new[] { (object)CustomerId })
  2. 更新数据库后使缓存信息失效 CustomerIdCache.Instance.Invalidate(customer);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29094687

复制
相关文章
使用gerrit作为代码评审工具
需求描述 其实作为项目代码的maintainer,一直习惯于mailing list + git的代码评审及管理,无奈公司主推敏捷+devops,老板让改用gerrit。硬着头皮切换到gerrit,在这里记录下安装配置的过程及踩过的许多坑,以便网友们以后配置gerrit留作参考。 需求其实很简单,我们项目一直使用公司内部一个类似于github的代码托管网站来托管项目代码,使用邮件列表来评审代码。代码通过评审通过后,我再将patch push到代码托管服务器上去。整个开发流程如下图所示:
宅蓝三木
2018/02/07
2.4K0
使用gerrit作为代码评审工具
代码审查或评审的最佳实践
现实情况是,代码审查对于每个参与者来说经常是一种令人不舒服的体验,导致审查变得好斗,无效甚至更糟,根本就不存在代码审查。 这是一个快速指南,可帮助您创建有效的代码审查过程。 为什么要进行代码审查? 在审核您的代码审核流程时要回答的第一个问题是:我们的代码审核的目的是什么?当您提出这个问题时,您很快意识到执行代码审查的原因有很多。您甚至可能会发现团队中的每个人都对他们审核代码的原因有不同的看法。他们可能会认为他们正在审查:
lyb-geek
2019/07/22
1K0
Gerrit 代码评审安装-快速使用手册
文章摘自googlesource,因实际安装环境不同文章内容也会对应做修改。本文基于Unix的操作系统解释说明,不推荐直接参照本文就部署在生产环境。
幺鹿
2018/08/21
1.1K0
超级账本-如何贡献
个人感受,文档看的再多,学习的速度也不如参与到项目中去,深入了解实现原理和设计的初衷。文档只能让我们对Fabric的整体运行机制有一个宏观的认识,要进一步深入,就需要从源代码入手,而贡献代码则是一个自然而然的事情,学习的过程中总会发现一些问题和值得优化的地方。所以前阵子顺手翻译了一下Fabric如何贡献相关的官方文档。这篇文章讲解,其中的整体流程和所需用到的工具。如需详细学习,请参考官方文档:
TopJohn
2022/11/11
1.1K0
Git Review + Gerrit 安装及使用完成 Code-Review
哎_小羊
2018/01/02
8.4K0
Git Review + Gerrit 安装及使用完成 Code-Review
【提问帖】GO中调用redis时,当并发量比较大时出现的问题。
GO中调用redis时,实始化一个连接池,做法也是一般的用户: &redis.Pool{ MaxIdle: beego.AppConfig.DefaultInt("redis::maxidle", 1), MaxActive: beego.AppConfig.DefaultInt("redis::maxactive", 10), IdleTimeout: time.Duration(beego.AppConfig.DefaultInt64("redis::idle_tim
李海彬
2018/03/27
2.2K0
腾讯云搭建git+gerrit代码评审服务器
这里我安装的是JDK8,安装完成之后输入java -version,出现一下结果说明安装成功了。
哆哆jarvis
2022/08/23
2.4K0
腾讯云搭建git+gerrit代码评审服务器
关于conda 更新时权限的问题
就被告知以下错误:PermissionError(13,'Permission denied)
戈贝尔光和热
2018/12/27
2.1K0
如何向OpenDaylight社区贡献代码
本文由两部分构成,第一部分简要介绍了Gerrit的工作原理以工作流程,第二部分结合自己成功提交代码的例子,向大家展示向OpenDaylight提交源码的过程。向开源项目提交代码也没有大家想象的那么难,所以希望日后能够看见大家在OpenDaylight提交代码。 Gerrit概述 Gerrit是一个基于Git的,用于review code commit的框架,无论是OpenDaylight、ONOS或者是OpenStack都使用Gerrit作为他们的代码管理工具。它的最大特点就是,每一个commit都需要被r
SDNLAB
2018/04/02
1.2K0
如何向OpenDaylight社区贡献代码
说透代码评审
  代码如熵,不加外力很容易就会随着代码的不断堆积而发生腐烂和溃败。我们不是不知道代码问题,而是对既成事实难有改变。但是如果站在迭代的角度思考下一次升级,如何确保新的代码质量就显得很有必要,特别是你的代码需要重写的时候,我想你一定会遇到和我一样的问题,我们究竟应该如何保证我们的代码的质量?于是就有了这篇工具型的文章。
架构之家
2022/07/12
7810
说透代码评审
jenkins如何集成gerrit
gerrit是一个基于web的代码审查工具,用于git版本控制系统,在代码入库之前对每个提交进行审阅。
用户5521279
2019/12/20
6.1K0
jenkins如何集成gerrit
Gerrit代码Review入门实战
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略。在实践中,给大家推荐一款免费、开放源代码的代码审查软件Gerrit。 1、Why Code Review Code Review是什么 Code Review最直观的解释即看代码。常规的做法为自己看,有时代码逻辑问题可能自己看不出来,需要找同事一起看,在大家知识体系相对平均的情况下可能需要花钱专门的公司帮助查看。 Code Review需要看哪些?对于刚入职场或者刚接触到C
个推君
2018/03/21
2K0
Gerrit代码Review入门实战
如何使用YATAS审查AWS基础设施中潜在的安全问题
YATAS是一款针对AWS基础设施安全的强大工具,该工具可以帮助广大研究人员分析和审查AWS基础设施中的错误配置或与插件集成相关的潜在安全问题。
FB客服
2023/02/10
4890
如何使用YATAS审查AWS基础设施中潜在的安全问题
评审的艺术——谈谈现实中的代码评审
曾经写过一点关于代码评审(code review)的文章,比如 这篇和 这篇 ,现在觉得关于它的认识又有了不少更新。软件工程的技术和实践分成两部分,一部分是和书本知识一致的,大约占一半,这部分基本上在大学里就可以学,自学只要方法得当、刻苦努力也可是途径;但是第二部分来自于实际团队、经验,内容通常无法从书本当中获得,而且难说对错,不同的人和不同的经历造就了不同的认识。代码评审就是第二部分颇具槽点,可以大加讨论的典型。
MavenTalker
2019/07/19
3050
当删库时如何避免跑路
删库跑路也是个老梗了,可见在运维数据库的过程中误删除数据,或者开发的代码有bug,造成数据的误删除屡见不鲜。不过现在也有许多用于恢复或预防误删除的方案,例如SQL管理系统,将要执行的SQL先交由管理员审核,然后由管理员备份一个镜像数据库,在镜像上执行该SQL,并在执行后还原镜像。这样经过层层把关就可以大大减小出现误操作的几率。
端碗吹水
2020/09/23
9980
当删库时如何避免跑路
评审的艺术——谈谈现实中的代码评审
曾经写过一点关于代码评审(code review)的文章,比如这篇和这篇,现在觉得关于它的认识又有了不少更新。软件工程的技术和实践分成两部分,一部分是和书本知识一致的,大约占一半,这部分基本上在大学里就可以学,自学只要方法得当、刻苦努力也可是途径;但是第二部分来自于实际团队、经验,内容通常无法从书本当中获得,而且难说对错,不同的人和不同的经历造就了不同的认识。代码评审就是第二部分颇具槽点,可以大加讨论的典型。
DevOps时代
2019/05/17
5300
评审的艺术 — 谈谈现实中的代码评审
曾经写过一点关于代码评审(code review)的文章,比如这篇和这篇,现在觉得关于它的认识又有了不少更新。软件工程的技术和实践分成两部分,一部分是和书本知识一致的,大约占一半,这部分基本上在大学里就可以学,自学只要方法得当、刻苦努力也可是途径;但是第二部分来自于实际团队、经验,内容通常无法从书本当中获得,而且难说对错,不同的人和不同的经历造就了不同的认识。代码评审就是第二部分颇具槽点,可以大加讨论的典型。
DevOps时代
2019/09/26
4360
评审的艺术 — 谈谈现实中的代码评审
评审的艺术——谈谈现实中的代码评审
曾经写过一点关于代码评审(code review)的文章,比如这篇和这篇,现在觉得关于它的认识又有了不少更新。软件工程的技术和实践分成两部分,一部分是和书本知识一致的,大约占一半,这部分基本上在大学里就可以学,自学只要方法得当、刻苦努力也可是途径;但是第二部分来自于实际团队、经验,内容通常无法从书本当中获得,而且难说对错,不同的人和不同的经历造就了不同的认识。代码评审就是第二部分颇具槽点,可以大加讨论的典型。
四火
2022/07/19
2990
当大模型不是问题时,如何应对 LLM 的工程化落地挑战?
几个月前,在 Thoughtworks 的内部 AIGC 研讨会里,我们一直达成了一系列一致观点,诸如于:如果没有 “开源模型” 降低企业应用 LLM 的成本,那么 LLM 会很快消亡。所以,我们相信开源 LLM + LoRA 微调会成为企业的一种主流方式。现今,我们可以看到 LLaMA 2、Code LLaMA 2 等模型在不断刷新这种可能性。
Phodal
2023/09/10
2.1K1
当大模型不是问题时,如何应对 LLM 的工程化落地挑战?
点击加载更多

相似问题

Gerrit代码评审

11

如何删除Gerrit代码评审中的组?

11

如何通过包在gerrit中设置代码评审?

15

如何避免浪费gerrit审查提交?

20

使用Gerrit进行代码评审

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档