Basic personligt

Daniels personliga blogg

Memcache med långa nycklar

För några dagar sedan skrev jag om hur praktiskt det är med en smart cache för vyerna i en webapplikation.

Tyvärr finns ett litet problem med just Memcache, och det är att den inte gillar nycklar som är längre än 256 tecken. Om det finns någon risk att nycklarna blir längre än så måste de förkortas på något sätt. Ett enkelt och någorlunda säkert sätt är att använda en checksumma av något slag, t.ex. MD5. Man får då en funktion som ser ut ungefär så här, i mitt fall i ApplicationController.

def render_cached(keys = {}, render_options = {})
    combokey = [
        controller_name,
        action_name,
        params[:format] || 'html',
        render_options.to_s,
        @user ? @user.id : 0
    ]
    combokey << keys[:key] if keys[:key]
    combokey << keys[:values] if keys[:values]
    combokey << keys[:items].collect {|item| item.updated_at.to_i}.sort if keys[:items]
    key = combokey.flatten.join(':')
    output = Cache.get(Digest::MD5.hexdigest(key)) do
        render_to_string render_options
    end
    render :text => output
end

I applikationen som jag har klippt det här från skickar jag in enstaka värden med :key och listor med :values.

Andra bloggar om: , , .

Advertisements

januari 1, 2008 - Posted by | problemlösning, teknik

Inga kommentarer ännu.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s