从ef列表更新缓存对象的最小密集方式

时间:2018-04-29 18:51:28

标签: c# sql database entity-framework comparison

我对ef相对较新,想要求一些建议。

我有一个标准的实体框架,其中包含非常短暂的上下文,每个用户每隔几分钟就需要更新一个页面。

此页面依赖于表格中的数据,该表格具有500k +行,不会经常更改或添加,因此我希望将这些数据存储在内存中,而不是每次刷新时拉取数据....

所以我要找的是将这些数据缓存在应用程序级别的List对象中,但是每次请求此信息都要检查缓存,如果有任何增量,那么只有那些在缓存中查询和更新然后拉动整个表并逐个处理。

例如。

<?xml version="1.0" encoding="UTF-8"?>
<SrvPutBusinessOperationEventNf>
    <RqUID>info</RqUID>
    <RqTm>info</RqTm>
    <SPName>info</SPName>
    <SystemId>info</SystemId>
    <Method></Method>
    <Message>
        <Event>
            <BusinessProcess>info</BusinessProcess>
            <Operation>info</Operation>
            <Step>info</Step>
            <SourceModule>info</SourceModule>
            <Id>info</Id>
            <EventDate>info</EventDate>
            <SendDate>info</SendDate>
            <BusinessAttributes>
                <ActionCallInfo/>
                <ActivityRepCallInfo/>
                <CRMCCCallInfo>
                    <AccountEPKId>info</AccountEPKId>
                    <AccountCRMId>info</AccountCRMId>
                    <CallId>info</CallId>
                    <CalledFromNum>info</CalledFromNum>
                    <AppealName>info</AppealName>
                    <CallbackPhone>info</CallbackPhone>
                    <EndDate>info</EndDate>
                    <Comment>info</Comment>
                    <Result>info</Result>
                    <CreatorFullName>info</CreatorFullName>
                    <EmployeeId>info</EmployeeId>
                </CRMCCCallInfo>
                <CRMCCQuestionInfo/>
                <ServiceRequestInfo/>
                <ActionMeetingInfo/>
            </BusinessAttributes>
        </Event>
    </Message>
</SrvPutBusinessOperationEventNf>

我知道这会将任何新记录添加到缓存中,但不会更新现有行。此外,我认为这将是密集的,因为(我可能在这里错了)要么它必须将缓存发送到数据库或下载整个表,然后再与其他表进行比较。

有关最佳方法的建议吗?

编辑: 在过滤后,我实际上并没有将页面的所有500k行拉到500,但是拉500仍然更加密集,因为缓存是正确的,或者拉动一些变化,特别是当很多用户在他的页面上时同时。

1 个答案:

答案 0 :(得分:0)

而不是这样做可能会使用SqlDependency类和Onchange重建缓存。意味着取消旧的缓存并重新加载它。

否则考虑使用基于分布式密钥的缓存系统(如Redis)并更新每条记录:检查缓存中是否存在记录然后更新缓存(或)替换缓存的对象