我正在编写一个使用第三方应用程序API的gem。请求的内容每天只更改一次。所以我想,某种缓存会很有用。返回的值只是一个简短的JSON。
将这些数据存储在一个表中感觉不方便,因为你必须编写迁移...使用redis或memcache引入另一个依赖项,我想避免。
所以我在考虑使用类变量来存储缓存的值。据我所知
我知道在州内使用类变量可能非常棘手和偷偷摸摸。但你认为我的情况好吗?或者我有没有想到的任何陷阱?或者使用像redis或memcache这样的东西会更好吗?
答案 0 :(得分:1)
它可以工作,变量中的每进程缓存读取速度非常快(可能是最快的整体选项),并且易于实现。实质上,大多数基于文件的配置系统都是以这种方式实现的长期缓存,因此每次获取配置变量都不是文件I / O.
有一些警告:
除非您编写其他代码来记录缓存命中/未命中并查看缓存内容,否则很难在正在运行的进程外监视缓存并与缓存进行通信。
您将只有机制来使您明确写入并允许的缓存无效。或者您可以重新启动服务器以清除错误的缓存。缓存失效逻辑很难正确。
缓存存储通常是每个进程(线程将共享相同的缓存数据)。与单独的缓存服务(如数据库或memcached)相比,这将需要更多的外部服务调用。
每进程存储还可能意味着您可能遇到某些服务器进程具有不同版本的数据的情况,这可能导致每个用户请求的服务器响应不一致(访问者看到一个版本的数据,然后是另一个,随机,直到差异通过缓存失效解决)
如果这些警告中的任何一个对您很重要,或者需要花费开发时间来解决,那么您最好使用专门编写的缓存服务。