仅供参考 - 我是新成员,相当新的程序员,这是我在stackoverflow上的第一篇文章。
对于我的网络应用程序,我一直在编写自己的数据缓存层;在这样做时,应用程序已设置为仅在缓存中找不到时才从数据库中获取数据。随着时间的推移,应用程序会从缓存中删除过时数据,以尽量减少RAM中保存的数据量。如果我的webapp驻留在单个服务器上,这对我来说很有效,可以限制对数据库服务器发出的只读请求数。现在我正在考虑在许多节点上对我的webapp进行负载均衡,并且我希望保持缓存实现不变。我试图解决的问题是如何保持不同的webapp节点缓存层同步。
问题场景可能是典型问题:
所以我想到了一些想法。
所以这是我第一次考虑这个问题。像我一样的隐士般的爱好程序员应该知道的任何众所周知的策略?想法,解决方案?
注意: - 我的主要语言是Clojure,但这并不一定与手头的问题有关。 - 我已经在使用NoSQL dbs。
感谢。
答案 0 :(得分:0)
如果您真的对实现自己的缓存解决方案感兴趣并希望保持节点同步,那么您可能希望在系统中添加一些外部缓存失效接口。
例如,如果NoSQL数据库支持更新后挂钩,则可以向所有节点发出 multicast UDP 命令,使某些值无效。或者,您可以使用某种类型的消息队列(例如ActiveMQ或RabbitMQ),但这可能会有点过分。
由于Clojure是一种基于JVM的语言,因此您可以使用一些现有的JVM缓存解决方案,例如Ehcache。如果您没有为教育目的实现此缓存系统,这样做可以为您节省大量时间和精力。
通过学习Erlang的方式是有趣和有用的体验的完美结合。我从不后悔自己花了一些时间来适应它。它也将在你的情况下最终得到回报。