簡體   English   中英

在Ruby Gem中緩存,可能不使用Rails

[英]Caching in Ruby Gem, possibly not using Rails

我正在重寫現有的Ruby Gem以包括緩存。 這是相對較常用的gem,它訪問Web服務上的大量靜態數據。 目前,我有少量的gem用戶對服務進行大量訪問,在正常情況下,它們會淹沒/關閉該服務 ,我們將把gem放在github上以供一般使用。

現在,用戶可以選擇使用Rails緩存機制,簡單磁盤緩存還是不使用緩存。

讓人們選擇像這樣使用哪種緩存的最佳實踐是什么(能夠在rails之外使用它是一個優先事項,因此我不能僅僅依靠底層的緩存機制)? 我正在尋找有關配置和界面的建議/示例。

謝謝你的建議

我寫了一個叫做“ cachecataz”的gem,它可以讓任何嵌入程序定義他們要使用的緩存機制/提供程序。 您可以輕松地使用相同的方法來允許用戶在多種不同的緩存機制之間進行選擇。

我選擇將api定義為“提供者”,然后將其定義為任何提供者所需的方法的“ api”。 這就是“ Rails.cache”提供程序和api的外觀。

Cachecataz.provider = Rails.cache
Cachecataz.api = {:get => :read, :set => :write, :incr => :increment, :exist? => :exist?}

這是一種非常簡單的方法,可以讓某人選擇由gem writer響應所需方法的對象。 api哈希中的每個值都可以是符號或響應:call的對象(例如Proc或lambda)。 然后,我只在gem(:get,:set,:incr,:exist?)中使用內部表示形式,並查找在運行時執行該對象所需的對象/方法:

def make_api_call(method, *args)
  if Cachecataz.api[method].respond_to?(:call)
    Cachecataz.api[method].call(*args)
  else
    Cachecataz.provider.send(Cachecataz.api[method], *args)
  end
end

這還不是全部代碼,但足夠接近,足以說明您可以在自己的gem中實現可插拔緩存api並支持許多緩存機制/提供程序的速度。 Cachecataz是開源的,如果您想查看代碼,可以在github上進行訪問,它非常簡短,並有文檔記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM