我有一个简单的nginxconfiguration; server{ servername localhost; root /var/www/webroot; location / { set_md5 $memcached_key $uri; index index.php index.html; try_files $uri $uri/ @cache; } location @cache { memcached_pass localhost:11211; default_type text/html; error_page 404 @fallback; } location @fallback{ try_files $uri $uri/ /index.php?url=$uri&$args; } location ~ \.php$ { fastcgi_param MEM_KEY $memcached_key; include /etc/nginx/fastcgi.conf; fastcgi_index index.php; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/php5-fpm.sock; } } […]
我在AWS有两台服务器。 一个是现场制作服务器(一个有数百个站点和大约5,000个用户的多站点WordPress安装),另一个是为testing服务器configuration的prod克隆。 活动的有四个arrays服务器,一个Elastic Load Balancer,连接到AWS中的一个大型RDS。 直到昨天,我天真地认为我们的caching正在通过APC和WordPress插件在这里和那里处理。 但不是。 结果发现有人在我们的服务器上添加了AWS的ElastiCache。 从本质上讲,ElastiCache是不在云中的那些memcache。 无论如何,我们前两天试图在我们的testing服务器上启用caching,并且引入了一个非常奇怪的错误(一个redirect神秘地出现在我们的活动网站的主要pipe理仪表板上,然后进入我们的testing服务器)。 所以一旦我们意识到这个bug最有可能与我们不知道的caching系统有关,我们就禁用了caching。 事实certificate,当我们在我们的testing服务器上启用caching时,它使用了我们在服务器上使用的同一个Elasticache服务器(因为testing是活的克隆)。 所以当我们删除/重命名object-cache.php文件时,我们禁用了它。 禁用它解决了我们的redirect问题,但是突然之间,我们的5,000个用户中有很多(不是全部)用户不能再login到他们各自的站点。 出于某种原因,我们的数据库中的值对于很大一部分用户来说不起作用,迫使他们不得不重置密码。 显然,这个数字是5000个用户的巨大数量。 因此,我们在实例上重新启用了caching,并决定修改我们的cachingredirect,而不是WPconfiguration更改(我们在configuration中添加了define('RELOCATE',true);强制redirect到我们的testing服务器被覆盖)。 我们在memcache中注意到的一件事情是,它不断更新我们的wp_options表,其中testing服务器的域代替了我们的活动域。 实际上,每当我运行查询来查找testing域的string并将其更新到活动域时,它仍然在执行此操作。 每隔几分钟,caching都会将其更改回来。 害怕。 但是现在看起来我们的configuration更改强制覆盖。 真正令人关注的是,看起来内存caching似乎是从自己的密钥中提取出来的:值为用户密码而不是直接从数据库中取值。 我的意思是启用caching,用户可以进入。没有它,许多用户被迫重置密码。 有没有人有任何想法,以便如何有效地了解在这种情况下与memcache发生了什么,以及如何解决这个问题,使数据库得到适当的写入,所以密码信息不只是在caching中举行? 我认为这是一个定时炸弹。 所有这一切都需要一个flush_all命令,让我的大部分用户的生活非常痛苦。 我们在NDS上使用RDS上的MySQL。 WordPress 3.4.2。
我对Memcached集群的世界很陌生 如果我有一个正在使用memcache的php web应用程序 – 它是如何做它的散列,并决定检查特定值的节点,以避免检查所有的。 奖金:如何轻松添加节点,避免重build所有散列。
我在安装libmemcached的时候得到了这个 root@server [/libmemcached]# make make all-am make[1]: Entering directory `/libmemcached' if /bin/sh ./libtool –tag=CXX –mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I. -I. -ggdb -DBUILDING_HASHKIT -MT libhashkit/libhashkit_libhashkit_la-aes.lo -MD -MP -MF "libhashkit/.deps/libhashkit_libhashkit_la-aes.Tpo" -c -o libhashkit/libhashkit_libhashkit_la-aes.lo `test -f 'libhashkit/aes.cc' || echo './'`libhashkit/aes.cc; \ then mv -f "libhashkit/.deps/libhashkit_libhashkit_la-aes.Tpo" "libhashkit/.deps/libhashkit_libhashkit_la-aes.Plo"; else rm -f "libhashkit/.deps/libhashkit_libhashkit_la-aes.Tpo"; exit 1; fi ./libtool: line 866: […]
对于Memcache和Redis我有点新意,我试图理解两者之间的区别,以及每个实际是什么。 正如我已经向我解释的那样,Memcache是一个数据库caching解决scheme。 来自频繁运行的查询的数据被caching以在稍后的时间点被重新使用以加快响应时间。 这是一个准确的描述? Redis呢? 这是否以类似的方式工作? 换句话说,它是否caching从后端数据库收到的数据? 我一直在读Redis是一个关键的价值存储解决scheme,对我来说听起来更像是数据库服务器和数据库caching解决scheme的替代品。 任何帮助了解每个是什么,以及有什么区别将不胜感激。 感谢Brad
让我先说这是这个话题的后续问题。 这是通过从Solaris(SmartOS)切换到Ubuntu的memcached服务器“解决”。 现在我们已经把负载乘以大约5倍,并且再次遇到问题。 我们正在运行一个站点,每分钟处理约1000个请求,每个请求大约有3个读取和1个写入访问Memcached。 所以加载大约是每秒65个请求。 caching中的总数据大约是37M,每个键包含非常less量的数据(一个JSON编码的小于1K的整数数组)。 我们在这些页面上build立了一个基准testing脚本,并将这些数据提供给StatsD进行logging。 问题是Memcached需要很长时间才能响应。 这些似乎与交通高峰相关。 什么可能导致这些尖峰? 为什么memcached会花一秒钟来回复呢? 我们启动了第二台服务器放入池中,并没有在峰值的频率或严重程度上有任何明显的差异。 这是服务器上getStats()的输出: Array ( [———–] => Array ( [pid] => 1364 [uptime] => 3715684 [threads] => 4 [time] => 1336596719 [pointer_size] => 64 [rusage_user_seconds] => 7924 [rusage_user_microseconds] => 170000 [rusage_system_seconds] => 187214 [rusage_system_microseconds] => 190000 [curr_items] => 12578 [total_items] => 53516300 [limit_maxbytes] => 943718400 […]
PHP有几个会话设置,控制垃圾收集(即删除已到期的会话)的概率。 我的问题是:这个概率是否适用于在任何给定的Apache服务器上的所有虚拟主机上运行的所有Apache线程? 例如: 如果概率设置为1/100,是否意味着任何运行PHP进程的Apache线程都进入可能运行gc的进程池中? 或者,这是否只适用于为任何给定的VirtualHost运行的线程? 还是其他的分区? 最后,如果一个触发gc的PHP进程,它是否在所有PHP会话上执行gc? 或者只是该虚拟主机的会话? 还是其他types的分配? 我试图衡量,我需要调整给定的VirtualHost,整个服务器,或什么的gc_probability设置。
我通过源安装memcached服务器,可以为1个memcached服务器实例安装标准启动脚本,但通过谷歌尝试几个脚本,找不到一个pipe理自动启动启动多个memcached服务器实例。 我已经尝试了这两个脚本,都不工作,服务memcached启动只是返回到命令提示符没有启动memcached服务器实例 lullabot.com/articles/installing-memcached-redhat-or-centos addmoremem.blogspot.com/2010/09/running-multiple-instances-of-memcached.html 然而,这个bash脚本的工作原理,但启动时不会启动memcached实例? #!/bin/sh case "$1" in start) /usr/local/bin/memcached -d -m 16 -p 11211 -u nobody /usr/local/bin/memcached -d -m 16 -p 11212 -u nobody ;; stop) killall memcached ;; esac 操作系统:Centos 5.5 64位Memcached = v1.4.5 Memcache = v2.2.5 任何人都可以指向我的工作/etc/init.d/启动脚本来pipe理多个memcached服务器? 谢谢 编辑:谢谢,这是代码,结束了工作 #!/bin/sh # chkconfig: – 80 12 # description: The memcached daemon is […]
我想知道是否有人对Varnish Vs Memcache有任何意见/基准/build议用于服务内容(通常根据请求中的参数2-5kb的JS文件;可能有数以千计的diff文件) 目前我们使用nginx + Varnish + LAMP来做到这一点。 我正在阅读有关nginx的memcached模块,并想知道是否有人在Memcache中caching内容的任何基准,并直接从nginx提供服务(或从LAMP incase错过),而不是将请求传递给Varnish,让它做同样的工作。 总的来说,是否有任何设置和获得(以及随时清除)内容的基准(通常2-5kb)与Memcache Vs光油 谢谢
我已经做了一些研究,并没有find明确的答案。 我们有一个使用PHP + Memcache会话处理程序的Web应用程序。 我有几个问题,都是相互关联的,但最终我的问题是:“为什么PHP会话显然不应该在我们认为应该到期的时候过期?” 即最终用户应该在设定的时间之后退出应用程序,但不是。 这里是点,请帮助我连接他们,并告诉我我错在哪里: 我的理解是,Memcache会根据设置的时间(以秒为单位)或者对于较大值的unix时间戳来过期键。 到期是懒惰的 – 即没有事先被删除 PHP memecache会话处理程序使用sessions.gc_max_lifetime来设置memcache密钥到期。 idk,也许它不? Memcache应该在提供请求的密钥并且已经过期的情况下不提供服务(也可以删除它)。 但至less不能服务。 这种不服务它的行为应该等同于一个被删除的会话并且用户被注销。 用户没有被注销。 我怎样才能debugging呢? Memcache并不完全透明。 未运行的示例大小写是会话超时设置为两个小时的站点。 一个示例用户将在晚上持续使用该站点,然后在8-10小时后返回该站点并仍然login。