我希望找到有关Rails 4中的缓存机制如何防止多个用户同时尝试重新生成缓存密钥的信息,也就是缓存标记:http://en.wikipedia.org/wiki/Cache_stampede
我无法通过谷歌搜索找到更多信息.如果我查看其他系统(例如Drupal),则通过semaphores数据库中的表实现缓存预防.
好吧,我想我在这里有一个非常基本的疑问:
我正在开发一个关于GAE(Java)的应用程序,并对返回大量实体的数据存储区执行查询,因此我需要对其进行缓存.我使用的是memcache并且工作得很好,但是如果我将实体列表保存在静态变量中,整个请求的速度是使用memcache的两倍.我认为那是因为我不是一直在反序列化实体.
在memcache上使用静态变量会有什么缺点?我不知道我的应用程序在云中是否有多个实例,因此我的静态变量的几个实例?
我正在尝试缓存的实体列表是上周的最佳(更高分)帖子.我拿这个列表并选择5个随机帖子并在几页中显示它们.
谢谢您的帮助!
java google-app-engine memcached static-variables google-cloud-datastore
你能在Memcache中存储一个数组吗?
我想存储;
作为一个阵列,有人告诉我你可以,然后有人告诉我你不能这是什么?
如何在没有提取的情况下将值存储在Memcache中,如何检入PHP?我不喜欢抓取它,因为我设置的值都是1MB大小,在我获取它之后,我没有用它,所以我浪费资源.我在脚本中使用它来检查某些键是否缓存在memcache中,如果没有,它会从慢速数据源读取它们并将它们设置在memcache中.
编辑:如果我使用Memcached::append附加NULL到我正在检查的密钥怎么办?TRUE成功或FALSE失败时的退货.如果密钥不存在,Memcached::getResultCode则返回Memcached::RES_NOTSTORED.这样我检查密钥是否存在,它应该把密钥放在LRU列表的顶部吗?
谢谢.
我见过很多人最近使用Redis作为缓存,为什么不使用Mongo?据我所知,Redis可以在一个索引上设置一个过期日期,比如memcache但是否有任何理由不使用Mongo呢?
我问,因为我在MySQL中进行大量连接,然后在选择后更改数据.我已经在网站的其他部分使用了memcache,但是将其保存在Mongo中将允许我对缓存的数据进行地理空间搜索.
我花了一些时间研究缓存(主要是redis和memcached),并且在数据不断变化时很难确定在哪里使用缓存.
以Twitter为例(只需阅读使Twitter快10000%).当大部分数据库记录不断变化时,您(或他们)如何缓存数据?
说Twitter也有这些模型:User,Tweet,Follow,Favorite.
有人可能会发布一条推文,它会在一天内被转发一次,而另一条推文会在一天内转发一千次.对于那个1000x转推,因为24 * 60 == 1440一天大约几分钟,这意味着Tweet几乎每分钟更新一次(说它也有440个收藏).与追随某人相同,查理光泽甚至在1天内吸引了100万Twitter追随者.在这些情况下缓存似乎并不值得,但也许只是因为我尚未达到这个水平.
另请注意,普通的Twitter粉丝每天至少发一次推文/关注/收藏.这意味着在天真的intro-rails架构案例中,users表每天至少更新一次(tweet_count等等).这种情况对于缓存用户配置文件很有意义.
但对于上面的1000x Tweets和1M粉丝示例,在缓存数据方面有哪些推荐做法?
具体来说(假设使用memcached或redis,并使用纯JSON API(无页面/片段缓存)):
20每个的redis列表)?我不明白的是数据变化的比例与缓存它的比例(以及处理缓存到期的复杂性).看起来Twitter可以缓存不同的用户推文提要,以及每个用户的家庭推文,但是每次收藏/推文/转推意味着更新所有这些缓存项(以及可能缓存的记录列表)时,缓存都会使缓存无效,在某些时候,它似乎意味着无效缓存是适得其反的.
缓存数据的推荐策略是什么?
php -v:
PHP 5.5.10-1+deb.sury.org~precise+1 (cli) (built: Mar 27 2014 16:18:01)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with XCache v3.1.0, Copyright (c) 2005-2013, by mOo
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with XCache Optimizer v3.1.0, Copyright (c) 2005-2013, by mOo
with XCache Cacher v3.1.0, Copyright (c) 2005-2013, by mOo
with XCache Coverager v3.1.0, Copyright (c) 2005-2013, by mOo
Run Code Online (Sandbox Code Playgroud)
dpkg -l | grep php5
结果
rc php5-memcache 3.0.6-1 memcache extension …Run Code Online (Sandbox Code Playgroud) 我正在运行Java Play框架版本v2.6.1并使用Ebean进行持久化.我的目的是使用play2-memcached插件获取bean缓存.
到目前为止我做了什么?
memcached在localhost上并启用详细日志记录.ehcache用cacheApiin libraryDependenciesin 替换了依赖build.sbt(我假设,应该完全删除Ehcache)."com.github.mumoshu" %% "play2-memcached-play26" % "0.9.0",到libraryDependencies在build.sbt"Spy Repository" at "http://files.couchbase.com/maven2",到resolvers在build.sbtplay.modules.disabled += "play.api.cache.ehcache.EhCacheModule"
play.modules.enabled+="com.github.mumoshu.play2.memcached.MemcachedModule"
play.cache.defaultCache=default
play.cache.bindCaches=["db-cache", "user-cache", "session-cache"]
memcached.host="127.0.0.1:11211"
Serializable,还添加了@com.avaje.ebean.annotation.Cache注释.什么有用?
Entity.find.byId(id)结果SQL 加载实体SELECT.使用不同的请求结果再次加载它没有SQL语句.com.github.mumoshu加载了与缓存相关的类.什么不起作用?
netstat -na | …有没有办法根据通配符键使memcache中的条目无效?
所以,如果我有以下memcache键:
data/1
data/2
data/3
Run Code Online (Sandbox Code Playgroud)
有没有办法让这些键无效data/*?一举清除一堆陈旧数据将是非常有帮助的.
我正在关注一篇博文(链接不再可用)并将memcached添加到services.yml
parameters:
memcached.servers:
- { host: 127.0.0.1, port: 11211 }
services:
memcached:
class: Memcached
calls:
- [ addServers, [ %memcached.servers% ]]
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中:
$memcached = $this->get('memcached');
Run Code Online (Sandbox Code Playgroud)
看起来很漂亮.如果我能过去的话500 - You have requested a non-existent service "memcached"!
来自php的测试代码连接到memcached没有任何麻烦.完成缓存:手动清除,清除缓存 - 没有帮助.
我应该在哪里看?