草庐IT

.net - Redis 用于频繁更改的市场信息

coder 2023-11-08 原文

我们软件环境中的当前方法是在分布式 SOA 基础结构中拥有多个 WCF 服务。有不止一种服务向前端网站提供来自证券交易所的信息,例如股票、债券、货币、共同基金。

Web 服务查询数据库,我们有直接来自 .net 框架的 ThreadCache,它可以将信息缓存 3-5 分钟。如果缓存过期,最终用户将调用将从数据库中检索新信息的方法。因此,该网站非常快,除了使用过期数据调用网络服务的网站之外......该用户的响应时间非常慢......可能大约 10-20 秒 :/

我想每 5 分钟将此市场信息提供给在 Windows 服务器上运行的 Redis 服务。 WCF 服务将从 REDIS 而不是数据库中获取信息。

我的一个大问题是,如何让使用新信息更新 REDIS 服务的数据馈送器在同一台机器上运行的最佳方法是什么?

  • Windows 服务每 5 分钟运行一次
  • 守护进程每 5 分钟从工作负载调度程序运行一次
  • ..或者也许我可以在 Redis 中实现一些方法,他自己 (REDIS) 会检查是否
    数据已过期,然后调用一些更新 REDIS 数据存储的方法。

给你意见! :)

最佳答案

这是我的看法

The webservices query the database and we have ThreadCache straight from .net framework which caches the information for 3-5 minutes. If the cache is expired, it would be the enduser that invokes the method that is going to retrieve new information from the database. So the website is pretty fast except for the one that invokes the webservice with expired data....that user will have a pretty slow reponse time... probably about 10-20 second :/

为什么需要服务层?如果仅用于缓存数据,我强烈建议您使用 AppFabric 或简单的 Redis 直接查询分布式缓存。另一层似乎对您的情况毫无用处,尤其是当代码似乎与您的网站耦合不佳时。

  • Windows service running in every 5 minutes
  • Daemon running every 5 minutes from an workload scheduler ..
  • Or maybe I can implement some method in Redis and he himself (REDIS) would check if the data has expired and then invoke some methods that updated the REDIS data storage.

Windows Service 或 Daemon,它们完全相同,并且是设置后台处理的推荐方式。我熟悉topshelf ,我发现它真的很强大。 即使 Redis 现在支持键空间通知,也无法直接调用用 .net 编写的内容。

您的数据在 5 分钟后过期?好的,但每分钟在后台运行一次任务以预加载/预缓存数据。对于最终用户来说,它总是很快,因为您永远不必重新加载它。

最后,Redis 的另一个重要特性是 PubSub .当 Redis 发生变化时,很容易通知所有订阅者。只需几行代码,它就可以让您在所有网站上实现本地缓存失效,并避免不同步的节点。

I want to feed this market information to a Redis service running on windows server in every 5 minutes. The WCF services would the get information from REDIS instead of database.

目前,Windows 上的 Redis 端口不是生产质量,但可用于 Windows(服务器)环境中的开发目的。我使用了几个月,发现它非常稳定,但建议在 Linux 环境中运行 Redis。

关于.net - Redis 用于频繁更改的市场信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20947936/

有关.net - Redis 用于频繁更改的市场信息的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  3. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  8. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  9. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  10. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

随机推荐