Class: Ramaze::Cache::MemCache
- Inherits:
-
Object
- Object
- Ramaze::Cache::MemCache
- Includes:
- Cache::API, Innate::Traited
- Defined in:
- lib/ramaze/cache/memcache.rb
Overview
Cache driver for the Memcache storage engine. Memcache is a key/value store that’s extremely useful for caching data such as views or API responses. More information about Memcache can be found on it’s website: <memcached.org/>.
Note that this cache driver requires the Dalli gem rather than Memcache Client. The reason for this is that the Memcache client hasn’t been updated in over a year and Memcache has changed quite a bit. Dalli is also supposed to be faster and better coded. This cache driver will also try to load the kgio Gem if it’s installed, if it’s not it will just continue to operate but you won’t get the nice speed boost.
This driver works similar to Ramaze::Cache::Sequel in that it allows you to specify instance specific options using the using() method:
Ramaze::Cache..session = Ramaze::Cache::MemCache.using(
:compression => false
)
All options sent to the using() method will be sent to Dalli.
Constant Summary collapse
- MAX_TTL =
The maximum Time To Live that can be used in Memcache
2592000
Class Attribute Summary collapse
Instance Attribute Summary collapse
-
#options ⇒ Object
Hash containing all the default options merged with the user specified ones.
Class Method Summary collapse
-
.using(options = {}) ⇒ Object
This method will create a subclass of Ramaze::Cache::MemCache with all the custom options set.
Instance Method Summary collapse
-
#cache_clear ⇒ Object
Removes all items from the cache.
-
#cache_delete(*keys) ⇒ Object
Removes the specified keys from the cache.
-
#cache_fetch(key, default = nil) ⇒ Mixed
Fetches the specified key from the cache.
-
#cache_setup(hostname, username, appname, cachename) ⇒ Object
Prepares the cache by creating the namespace and an instance of a Dalli client.
-
#cache_store(key, value, options = {}) ⇒ Mixed
Sets the given key to the specified value.
-
#initialize(options = {}) ⇒ MemCache
constructor
Creates a new instance of the cache class.
Constructor Details
Class Attribute Details
.options ⇒ Object
74 75 76 |
# File 'lib/ramaze/cache/memcache.rb', line 74 def @options end |
Instance Attribute Details
#options ⇒ Object
Hash containing all the default options merged with the user specified ones
71 72 73 |
# File 'lib/ramaze/cache/memcache.rb', line 71 def @options end |
Class Method Details
.using(options = {}) ⇒ Object
This method will create a subclass of Ramaze::Cache::MemCache with all the custom options set. All options set in this method will be sent to Dalli as well.
Using this method allows you to use different memcache settings for various parts of Ramaze. For example, you might want to use servers A and B for storing the sessions but server C for only views. Most of the way this method works was inspired by Ramaze::Cache::Sequel which was contributed by Lars Olsson.
102 103 104 105 |
# File 'lib/ramaze/cache/memcache.rb', line 102 def using( = {}) merged = Ramaze::Cache::MemCache.trait[:default].merge() Class.new(self) { @options = merged } end |
Instance Method Details
#cache_clear ⇒ Object
Removes all items from the cache.
155 156 157 |
# File 'lib/ramaze/cache/memcache.rb', line 155 def cache_clear @client.flush end |
#cache_delete(*keys) ⇒ Object
Removes the specified keys from the cache.
166 167 168 169 170 |
# File 'lib/ramaze/cache/memcache.rb', line 166 def cache_delete(*keys) keys.each do |key| @client.delete(key) end end |
#cache_fetch(key, default = nil) ⇒ Mixed
Fetches the specified key from the cache. It the value was nil the default value will be returned instead.
182 183 184 185 186 187 188 189 190 |
# File 'lib/ramaze/cache/memcache.rb', line 182 def cache_fetch(key, default = nil) value = @client.get(key) if value.nil? return default else return value end end |
#cache_setup(hostname, username, appname, cachename) ⇒ Object
Prepares the cache by creating the namespace and an instance of a Dalli client.
136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/ramaze/cache/memcache.rb', line 136 def cache_setup(hostname, username, appname, cachename) # Validate the maximum TTL if [:expires_in] > MAX_TTL raise(ArgumentError, "The maximum TTL of Memcache is 30 days") end [:namespace] = [ hostname, username, appname, cachename ].compact.join('-') @client = ::Dalli::Client.new([:servers], ) end |
#cache_store(key, value, options = {}) ⇒ Mixed
Sets the given key to the specified value. Optionally you can specify a hash with options specific to the key. Once a key has been stored it’s value will be returned.
206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/ramaze/cache/memcache.rb', line 206 def cache_store(key, value, = {}) ttl = .delete(:ttl) || @options[:expires_in] if ttl > MAX_TTL raise(ArgumentError, "The maximum TTL of Memcache is 30 days") end @client.set(key, value, ttl, ) return value end |