我想知道是否应该以某种方式缓存从我的DAL返回的对象?我可能有多个UI控件在页面的单个负载中调用相同的数据。缓存DAL返回对象?
你们会推荐什么?我开始谨慎一点吗?它不是一个可怕的数据量。但是,如果我应该以某种方式进行缓存,那么推荐的方法是什么?
我想知道是否应该以某种方式缓存从我的DAL返回的对象?我可能有多个UI控件在页面的单个负载中调用相同的数据。缓存DAL返回对象?
你们会推荐什么?我开始谨慎一点吗?它不是一个可怕的数据量。但是,如果我应该以某种方式进行缓存,那么推荐的方法是什么?
你可能cache如果你真的在同一页面上有多个控件使用相同的数据,你可以在父页面调用一次数据,并在每个控件中使用Setter将引用传递给每个控件(而不是让每个控制器从DAL本身拉出相同的数据),例如:
myControl.AllUsers = _allUsers;
....
myOtherControl.AllUsers = _allUsers;
我也同意@DanielHilgarth。缓存增加了复杂性(例如,何时刷新缓存)。无论如何,如果页面加载速度很快,我不会打扰。
如果页面很慢,循环中的数据库调用通常是我的经验的罪魁祸首。
感谢这是我要采取的方法,它似乎工作得很好。我打算从父页面调用一次数据(并在稍后需要时将其缓存在父页面上),并将填充的对象传递给所有控件,而不是让控件独立调用它们。我认为这将大大优化页面,并让我避免在DAL内缓存一些复杂性。 – Nugs
这取决于它是否安全并且必要时这样做。如果您正在使用的数据不需要实时数据(即您的博客),那么如果您觉得这样做是必要的(意思是您的网站运行缓慢),那么通过一切手段缓存。
高速缓存的一个问题是,如果需要立即响应(例如禁止用户或更新支付网关信息)的事情,人们很多时候会忘记要求清除缓存。
有两种主要类型的缓存,滑动缓存和固定时间缓存。
滑动缓存(每次执行有效检索时得到扩展的缓存)对于计算相对容易的值但可能会受到数据库/网络开销影响的资源非常适用。在滑动高速缓存上缓存1小时(或永远),然后在DAO发生INSERT/UPDATE/DELETE时手动使缓存无效(移除)。通过这种方式,用户将看到实时结果,但实际上只要有可能就会被缓存。
固定时间缓存适用于难以执行的资源(即非常复杂的存储过程),并且不需要实时准确性。在首次请求时缓存1小时(或永远),并且在第一个小时到达之前不要清除缓存。 INSERT/UPDATE/DELETE被你的缓存机制忽略(除非它是绝对必要的)。
如果你有性能问题,而不是因为有人这样说,你需要缓存... –
@DanielHilgarth我不同意。您可以留意未来,而不是不必要地做20个电话来获取用户ID。他也可能超载数据库而不知道它,但是没有性能问题。 –
那么我一直在遇到一些奇怪的性能问题,但我还不确定这是由于对数据库的多次调用。调试抓取数据时需要几毫秒。但它在名单上正在消除。然而,正如你所说的尤里,在对数据库的呼叫方面规划未来并没有什么坏处。 – Nugs