我正在开发一个具有 Web 作业和 Azure 函数应用程序的应用程序。 Web 作业生成 redis 缓存供函数应用使用。缓存大小约为 10 兆字节。我正在按照建议使用延迟加载。我仍然发现整体缓存操作很慢。根据我正在处理的文件的大小,我最终可能会调用 Redis 缓存多达 100,000 次。想知道我是否需要将缓存数据保存在本地变量中,而不是每次都从 redis 中读取它。有没有人在访问 Redis 时遇到任何延迟?在 C# 函数应用程序中创建单例对象并根据某些计时器或其他逻辑刷新它是否有意义?
最佳答案
你能不能在你的使用中考虑到这一点,这是 azure redis cashe 的一些好的实践
Redis 最适合较小的值,因此请考虑将较大的数据分成多个键。在这个Redis discussion , 100kb 被认为是“大”。阅读this article对于可能由大值引起的示例问题。
为生产系统使用标准层或高级层。基本层是单节点系统,没有数据复制,也没有 SLA。另外,至少使用一个 C1 缓存。 C0 缓存实际上适用于简单的开发/测试场景,因为它们具有共享的 CPU 核心、非常小的内存、容易出现“嘈杂的邻居”等问题。
请记住,Redis 是一种内存数据存储。以便您了解可能发生数据丢失的情况。
重用连接 - 创建新连接的成本很高并且会增加延迟,因此请尽可能重用连接。如果您选择创建新连接,请确保在释放它们之前关闭旧连接(即使是在托管内存语言中,如 .NET 或 Java)。
将您的缓存实例和您的应用程序放在同一区域。连接到不同区域的缓存会显着增加延迟并降低可靠性。支持从 Azure 外部进行连接,但不建议这样做,尤其是在将 Redis 用作缓存时(与延迟可能不是主要问题的键/值存储相反)。
Redis 最适合较小的值,因此请考虑将较大的数据分成多个键。
配置您的 maxmemory-reserved设置以在内存压力条件下提高系统响应能力,特别是对于写入繁重的工作负载,或者如果您在 Redis 中存储更大的值(100KB 或更多)。我建议从缓存大小的 10% 开始,然后如果您有大量写入负载则增加。参见 some considerations选择值时。
避免昂贵的命令 - 一些 redis 操作,如“KEYS”命令,非常昂贵,应该避免。
将您的客户端库配置为使用至少 10 到 15 秒的“连接超时”,让系统有时间进行连接,即使在更高的 CPU 条件下也是如此。如果您的客户端或服务器往往处于高负载下,请使用更大的值。如果您在单个应用程序中使用大量连接,请考虑添加某种类型的交错重新连接逻辑,以防止大量连接同时攻击服务器。
关于caching - Azure Redis 缓存延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805488/
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot
我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述
有什么方法可以告诉Rails3在给定的Controller中缓存所有页面,而不必在调用caches_page时列出所有页面?我尝试了caches_page:all,但它不起作用。 最佳答案 有点像实现的错误,但我刚刚尝试过它并且它适用于Rails3.0.6:caches_page:except=>[] 关于ruby-caches_page:all,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/que
我正在尝试升级到Rails4beta1,但遇到了一些问题。简而言之,这就是我的应用程序Controller的样子。classApplicationControllercaches_action在Rails4中移到了它自己的gem中,因此包含gem应该可以解决问题。gem"actionpack-action_caching",github:"rails/actionpack-action_caching"但是当我运行我的请求规范或在浏览器中访问该应用程序时,我收到此错误。app/controllers/application_controller.rb:3:in`':undefinedm
我有一些使用delayed_job的小程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存到表delayed_job中。Inthisarticleonherokublog写入时,执行delayed_job表中的任务,当运行此命令时rakejobs:work。但是我怎样才能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台? 最佳答案 如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:herokurunrakejobs:
当我尝试进行bundle安装时,我的gem_path和gem_home指向/usr/local/rvm/gems/我没有写入权限,并且由于权限无效而失败。因此,我已将两个路径都更改为我具有写入权限的本地目录。这样做时,我进行了bundle安装,我得到:bruno@test6:~$bundleinstallFetchinggemmetadatafromhttps://rubygems.org/.........Fetchinggemmetadatafromhttps://rubygems.org/..Bundler::GemspecError:Couldnotreadgemat/afs/
在rails开发环境中,cache_classes是关闭的,所以你可以修改app/下的代码,不用重启服务器就可以看到变化。不过,在所有环境中,中间件只会创建一次。所以如果我有这样的中间件:classMyMiddlewaredefinitialize(app)@app=appenddefcall(env)env['model']=MyModel.firstendend我在config/environments/development.rb中执行此操作:config.cache_classes=false#thedefaultfordevelopmentconfig.middleware.
我一直在Heroku上尝试不同的缓存策略,并添加了他们的memcached附加组件,目的是为我的应用程序添加Action缓存。但是,当我在我当前的应用程序上查看Rails.cache.stats时(安装了memcached并使用dalligem),在执行应该缓存的操作后,我得到current和total_items为0。在Controller的顶部,我想缓存我有的Action:caches_action:show此外,我修改了我的环境配置(对于在Heroku上运行的配置)config.cache_store=:dalli_store我是否可以查看其他一些统计数据,看看它是否有效或我做错