Moneta::Monetas =============== store = Moneta::Monetas.new(:stores => [ Moneta::Memory.new, Moneta::BasicFile.new(...)]) Read operations select a random cache, write operations write to all caches. Moneta: A unified interface for key/value stores ================================================ Moneta provides a standard interface for interacting with various kinds of key/value stores. Out of the box, it supports: * File store for xattr * Basic File Store * Memcache store * In-memory store * The xattrs in a file system * DataMapper * S3 * Berkeley DB * Redis * SDBM * Tokyo * CouchDB All stores support key expiration, but only memcache supports it natively. All other stores emulate expiration. The Moneta API is purposely extremely similar to the Hash API. In order so support an identical API across stores, it does not support iteration or partial matches, but that might come in a future release. The API: #initialize(options):: options differs per-store, and is used to set up the store #[](key):: retrieve a key. if the key is not available, return nil #fetch(key, &block):: retrieve a key. if the key is not available, execute the block and return its return value. #fetch(key, value) retrieve a key. if the key is not available, return the value #[]=(key, value):: set a value for a key. if the key is already used, clobber it. keys set using []= will never expire #delete(key):: delete the key from the store and return the current value #key?(key):: true if the key exists, false if it does not #has_key?(key):: alias for key? #store(key, value, options):: same as []=, but you can supply an :expires_in option, which will specify a number of seconds before the key should expire. In order to support the same features across all stores, only full seconds are supported #update_key(key, options):: updates an existing key with a new :expires_in option. if the key has already expired, it will not be updated. #clear:: clear all keys in this store Moneta::ActiveRecord ==================== You need a migration: class AddMonetaTable < ActiveRecord::Migration # Only needed if you want to keep your cache in a separate database class TheStore < ActiveRecord::Base establish_connection "#{Rails.env}_store" end def self.connection TheStore.connection end def self.up create_table 'moneta_store', :id => false do |t| t.string :key, :null => false t.text :value end if mysql? execute "alter table moneta_store modify column `key` varchar(255) primary key" else execute "alter table moneta_store add primary key (key)" end end def self.down drop_table 'moneta_store' end def self.mysql? ActiveRecord::Base.configurations[Rails.env]['adapter'] == 'mysql' end end Initialize like this: store = Moneta::ActiveRecord.new(:connection => ActiveRecord::Base.configurations["#{Rails.env}_store"])
Project
dkastner-moneta
A unified interface to key/value stores
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Pull Requests
Development
Project Readme