问题标签 [query-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
939 浏览

c# - NHibernate 缓存:明智的使用,最佳实践?

我使用 Linq 表达式查询我的 NHibernate 数据源。我遇到的问题是,在比较中没有两个表达式的调用(或评估,抱歉词汇量不好)匹配。因此,NHibernate 经常使用相同的参数执行相同的 SQL。

我通过使用 NHibernate 缓存解决了这个问题,像这样流畅地配置:

我稍后会照顾提供者,这样它就不会最终投入生产。接下来,我的所有查询都表示为可缓存的:

据我所知缓存查询发生在二级缓存中,它有一个每个 SessionFactory 范围。另一方面,这意味着为了重新加载我的应用程序数据,我必须重新启动 SessionFactory,我认为这比对会话执行相同操作要昂贵得多。

是一种有效的方法来缓存查询而不弄乱 SessionFactory(不是字面意思,你知道我的意思)吗?

0 投票
1 回答
1701 浏览

java - Hibernate 不会驱逐查询缓存(不可重复读取问题)

我是 java/spring/hibernate 的新手,经过几年的 .Net 编程,我真的爱上了 java。

现在我正在使用 Spring(MVC,声明性事务)和 Hibernate(3.6,作为缓存提供者 - ehCache 2.5)开发 Web 应用程序。我有一些只读和读写实体,我想使用 Hibernate 第二缓存和查询缓存进行缓存。

当我对只读实体使用缓存时,一切都很好。我添加了读写实体并使用 jMeter 运行性能测试。对于读写实体,我面临不可重复读取的问题。例如,有几个并发线程读取和写入实体表。

线程 3 获取查找值:

它发现缓存不是最新的并加载实体,将它们添加到二级缓存,物化并返回......从这里一直持续到16:34:45,826

同时线程 9 删除实体之一并更新二级缓存 + 时间戳:

线程 3 继续做家务活动,最后将查询结果添加到查询缓存中(注意时间戳将高于线程 9 的删除操作的时间戳):

因此,此时已删除的 ID 将在查询缓存中,并且查询缓存将被视为是最新的。

因此,当您再次尝试进行查找时,它将在查询缓存中查找,然后开始从第二个缓存中实现实体。

但已删除的项目不会存在,因此将完成对 db 的查询。

因为我使用的是 Load 方法,所以如果在 db 中找不到实体,它会引发异常。在我的情况下,实体很少会更新它可能会发生,这让我很担心。我对如何尝试克服这个问题的想法很少:

a)在数据库中将 trx 隔离级别设置为可重复读取(但是不要认为这会有所帮助,因为在从数据库读取数据后会添加到缓存逻辑)b)手动强制标准查询缓存驱逐实体删除/更新 c)做根本不使用查询缓存(尝试路由大多数数据库查询以使用第二个缓存)

以前有人遇到过这个问题吗?

0 投票
1 回答
844 浏览

mysql - Rails 3:如何在 MongoDB 中实现查询缓存

我对 MongoDB 做了一些研究,发现它没有任何查询缓存。

MongoDB 不实现查询缓存:MongoDB 直接从索引和/或数据文件提供所有查询。(http://docs.mongodb.org/manual/faq/fundamentals/)

有没有办法在 Rails 中为 MongoDB 实现查询缓存?我只想要与 MySQL 查询缓存相同的行为。第二次相同的数据库查询应该更快。

谢谢!

0 投票
2 回答
851 浏览

mysql - MySQL 查询缓存:大型网站建设平台是或否

翻阅关于 MySQL 查询缓存的大量信息和相互冲突的建议可能真的让人不知所措,很难说出它与我的用例有何关系。

我们有一个大型定制平台,运行在托管许多网站的 LAMP 堆栈上。每个网站都将其内容存储在表格行中。在大多数情况下,它们都在同一张桌子上。我读过每当更新表时所有缓存的查询都会失效,但我也读过关于它的冲突内容。

假设有人访问网站 A,其内容从数据库中加载并在此过程中缓存。另一个人随后访问,由于数据被缓存,因此网站加载速度更快。现在B网站的内容发生了变化,和A网站在同一个表中的一行。A网站的所有缓存数据现在都失效了吗?如果是这样,我们真的会通过完全关闭查询缓存来提高性能吗?

我一直在阅读有关调整查询缓存的内容,而且非常不知所措。我尝试了一些东西,但很难说它们有多大的影响。这是来自 MySQLTunerscript 的当前粘贴:

提前感谢您的任何建议。

0 投票
1 回答
688 浏览

nhibernate - 即使 ORDER BY 子句不同,NHibernate 也会检索缓存的查询结果

我正在使用查询缓存和 ORDER BY 子句看到我称之为 NHibernate 中的错误...

当我运行以下查询时...

...如果我打开了查询缓存,NHibernate 会成功缓存它的结果,并且我告诉它缓存这个查询(使用 eg criteria.SetCacheable(true))。

不幸的是,正如精彩的NHProf告诉我的那样,NHibernate 在运行此查询时也使用缓存的查询结果:

任何人都可以解释为什么或向我指出有关此“功能”的一些深入文档吗?或者,更好的是,有没有人能解决这个问题?

0 投票
1 回答
752 浏览

mysql - MySQL查询缓存问题

我对 MySQL 运行了以下 sql:

这是我得到的:

我不明白为什么会这样,因为我确实仔细检查了查询缓存是否已启用属性,如下所示:

有人可以帮忙吗?

0 投票
2 回答
4072 浏览

php - 如何检查我的服务器上的 query_cache_type 值

我已经使用这个查询检查了查询缓存的状态SHOW VARIABLES LIKE ‘%query_cache%’;。同样,是否有任何查询或命令来检查query_cache_type. 任何帮助将不胜感激。

0 投票
1 回答
622 浏览

mysql - 查询缓存与 MEMORY 存储表

我计划通过数据缓存优化我的 Web 应用程序的性能。它使用 MySQL,所以到目前为止我发现的选项是这些 2:

  • 使用 MySQL 查询缓存功能
  • 使用内存存储引擎创建一个表,并将查询的完整结果作为序列化数组保存在其中;

我更喜欢第二个,因为我只需要缓存一个表,并且表修改的查询缓存会立即使从该表派生的所有查询无效。在我的内存表中,我只能删除已修改(更新)的行。当然这将需要更多的代码,但我想整体性能会更好。

你推荐什么,为什么?

0 投票
1 回答
260 浏览

nhibernate - 带有连字符的 NHibernate 查询缓存错误

我将 NH 3.3.1.4000 与 Oracle 10g 和 SQL Server 2008 一起使用。

我最近遇到了这个可能的错误。考虑以下两个查询:

上述任一查询都会产生以下 SQL 查询:

任何传入并带有“-”(连字符)的参数都不会出现在实际的 SQL 查询中

如果我删除参数中的 .Cacheable 或 SetCacheable() 或“-”,它可以正常工作。在我开始查看 NH 源代码之前,有什么解决方法的想法吗?谢谢。

更新 我可以确认 SQL Server 也存在同样的问题。我猜它与数据库无关,而与查询缓存无关。我应该提到第一次运行查询时,在缓存发生之前,生成的查询是正确的。但是当我第二次运行相同的查询时,这次从查询缓存中加载,可缓存连字符不起作用。请参阅我在 .Net MVC 应用程序上使用 SQL Server 2008 运行的以下测试。

我第一次加载页面时生成了以下查询并且都是正确的:

但是在我重新加载页面并让查询缓存做它的事情后,我得到以下三个查询:

如您所见,第二次语句#1 中的参数为空。语句#1 和语句#2 之间的唯一区别是查询缓存的使用。只要参数中没有“-”连字符,缓存查询在第二次加载(test3)中工作正常。

0 投票
2 回答
576 浏览

php - 加速 php/mysql

可能重复:
在高负载站点中使用 PHP 的策略

我刚来这地方。这是第一次。

我的一个网站(在 php/mysql 中)获得了良好的流量,我也将主机升级到了 VPS。在高峰时段,它每小时有 7-8 个用户和近 5 万个数据库请求。但我仍然在高峰时段遇到性能问题。本站不做数据库交易。它只是为来自 mysql 服务器的移动应用程序提供 xml 提要(单向流量,没有数据来自用户)。现在我和我的主机谈了速度,他们谈了一些事情,我非常需要你的意见-

  1. 他们谈到了安装 memcached。只是安装它会解决问题吗?我该如何使用它?因为他们说,好像只要安装它就可以解决问题。
  2. Mysql 查询缓存。我知道如何使用它。会不会提高性能。我的大多数用户都要求 3-4 个结果(70% 的流量)。
  3. 由于所有查询都只是选择查询,我该如何优化才能使 mysql 表在获取结果时不被锁定。或者我能从你那里得到的任何其他建议。

非常感谢您的时间和帮助。