Class: ActiveSupport::Cache::CouchbaseStore
- Inherits:
-
Store
- Object
- Store
- ActiveSupport::Cache::CouchbaseStore
- Defined in:
- lib/active_support/cache/couchbase_store.rb
Overview
This class implements Cache interface for Rails. To use it just put following line in your config/application.rb file:
config.cache_store = :couchbase_store
You can also pass additional connection options there
= {
:bucket => 'protected',
:username => 'protected',
:password => 'secret',
:expires_in => 30.seconds
}
config.cache_store = :couchbase_store,
Instance Method Summary collapse
-
#decrement(name, amount = 1, options = nil) ⇒ Fixnum
Decrement an integer value in the cache.
-
#delete(name, options = nil) ⇒ true, false
Deletes an entry in the cache.
-
#delete_entry(key, options) ⇒ Object
protected
Delete an entry from the cache.
-
#exists?(name, options = nil) ⇒ true, false
(also: #exist?)
Return true if the cache contains an entry for the given key.
-
#fetch(name, options = nil) ⇒ Object
Fetches data from the cache, using the given key.
-
#increment(name, amount = 1, options = nil) ⇒ Fixnum
Increment an integer value in the cache.
-
#initialize(*args) ⇒ CouchbaseStore
constructor
Creates a new CouchbaseStore object, with the given options.
-
#read(name, options = nil) ⇒ Object
Fetches data from the cache, using the given key.
-
#read_entry(key, options) ⇒ Object
protected
Read an entry from the cache.
-
#read_multi(*names) ⇒ Hash
Read multiple values at once from the cache.
-
#stats(*arg) ⇒ Hash
Get the statistics from the memcached servers.
-
#write(name, value, options = nil) ⇒ Fixnum, false
Writes the value to the cache, with the key.
-
#write_entry(key, value, options) ⇒ Object
protected
Write an entry to the cache.
Constructor Details
#initialize(*args) ⇒ CouchbaseStore
Creates a new CouchbaseStore object, with the given options. For more info see ActiveSupport::Cache::CouchbaseStore.{Couchbase{Couchbase::Bucket{Couchbase::Bucket#initialize}
ActiveSupport::Cache::CouchbaseStore.new(:bucket => "cache")
If no options are specified, then CouchbaseStore will connect to localhost port 8091 (default Couchbase Server port) and will use bucket named “default” which is always open for unauthorized access (if exists).
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/active_support/cache/couchbase_store.rb', line 50 def initialize(*args) args = [*(args.flatten)] = args. || {} @raise_errors = ![:quiet] = !.delete(:raise_errors) [:default_ttl] ||= .delete(:expires_in) [:default_format] ||= :marshal [:key_prefix] ||= .delete(:namespace) args.push() @data = ::Couchbase::Bucket.new(*args) end |
Instance Method Details
#decrement(name, amount = 1, options = nil) ⇒ Fixnum
Decrement an integer value in the cache.
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 |
# File 'lib/active_support/cache/couchbase_store.rb', line 268 def decrement(name, amount = 1, = nil) ||= {} name = name if ttl = .delete(:expires_in) [:ttl] ||= ttl end [:create] = true instrument(:decrement, name, ) do |payload| payload[:amount] = amount if payload @data.decr(name, amount, ) end rescue ::Couchbase::Error::Base => e logger.error("#{e.class}: #{e.}") if logger raise if @raise_errors false end |
#delete(name, options = nil) ⇒ true, false
Deletes an entry in the cache.
213 214 215 216 217 218 219 220 |
# File 'lib/active_support/cache/couchbase_store.rb', line 213 def delete(name, = nil) ||= {} name = name instrument(:delete, name) do delete_entry(name, ) end end |
#delete_entry(key, options) ⇒ Object (protected)
Delete an entry from the cache.
324 325 326 327 328 329 330 |
# File 'lib/active_support/cache/couchbase_store.rb', line 324 def delete_entry(key, ) # :nodoc: @data.delete(key, ) rescue ::Couchbase::Error::Base => e logger.error("#{e.class}: #{e.}") if logger raise if @raise_errors false end |
#exists?(name, options = nil) ⇒ true, false Also known as: exist?
Return true if the cache contains an entry for the given key.
198 199 200 201 202 203 204 205 |
# File 'lib/active_support/cache/couchbase_store.rb', line 198 def exists?(name, = nil) ||= {} name = name instrument(:exists?, name) do !read_entry(name, ).nil? end end |
#fetch(name, options = nil) ⇒ Object
Fetches data from the cache, using the given key.
If there is data in the cache with the given key, then that data is returned. If there is no such data in the cache (a cache miss), then nil will be returned. However, if a block has been passed, that block will be run in the event of a cache miss. The return value of the block will be written to the cache under the given cache key, and that return value will be returned.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/active_support/cache/couchbase_store.rb', line 84 def fetch(name, = nil) ||= {} name = (name) if block_given? unless [:force] entry = instrument(:read, name, ) do |payload| payload[:super_operation] = :fetch if payload read_entry(name, ) end end if !entry.nil? instrument(:fetch_hit, name, ) { |payload| } entry else result = instrument(:generate, name, ) do |payload| yield end write(name, result, ) result end else read(name, ) end end |
#increment(name, amount = 1, options = nil) ⇒ Fixnum
Increment an integer value in the cache.
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/active_support/cache/couchbase_store.rb', line 236 def increment(name, amount = 1, = nil) ||= {} name = name if ttl = .delete(:expires_in) [:ttl] ||= ttl end [:create] = true instrument(:increment, name, ) do |payload| payload[:amount] = amount if payload @data.incr(name, amount, ) end rescue ::Couchbase::Error::Base => e logger.error("#{e.class}: #{e.}") if logger raise if @raise_errors false end |
#read(name, options = nil) ⇒ Object
Fetches data from the cache, using the given key.
If there is data in the cache with the given key, then that data is returned. Otherwise, nil is returned.
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/active_support/cache/couchbase_store.rb', line 154 def read(name, = nil) ||= {} name = name if .delete(:raw) [:format] = :plain end instrument(:read, name, ) do |payload| entry = read_entry(name, ) payload[:hit] = !!entry if payload entry end end |
#read_entry(key, options) ⇒ Object (protected)
Read an entry from the cache.
298 299 300 301 302 303 304 |
# File 'lib/active_support/cache/couchbase_store.rb', line 298 def read_entry(key, ) # :nodoc: @data.get(key, ) rescue ::Couchbase::Error::Base => e logger.error("#{e.class}: #{e.}") if logger raise if @raise_errors nil end |
#read_multi(*names) ⇒ Hash
Read multiple values at once from the cache.
Options can be passed in the last argument.
Returns a hash mapping the names provided to the values found.
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/active_support/cache/couchbase_store.rb', line 177 def read_multi(*names) = names. names = names.flatten.map{|name| (name)} [:assemble_hash] = true if .delete(:raw) [:format] = :plain end instrument(:read_multi, names, ) do @data.get(names, ) end rescue ::Couchbase::Error::Base => e logger.error("#{e.class}: #{e.}") if logger raise if @raise_errors false end |
#stats(*arg) ⇒ Hash
Get the statistics from the memcached servers.
291 292 293 |
# File 'lib/active_support/cache/couchbase_store.rb', line 291 def stats(*arg) @data.stats(*arg) end |
#write(name, value, options = nil) ⇒ Fixnum, false
Writes the value to the cache, with the key
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/active_support/cache/couchbase_store.rb', line 124 def write(name, value, = nil) ||= {} name = name if .delete(:raw) [:format] = :plain value = value.to_s value.force_encoding(Encoding::BINARY) if defined?(Encoding) end instrument(:write, name, ) do |payload| write_entry(name, value, ) end end |
#write_entry(key, value, options) ⇒ Object (protected)
Write an entry to the cache.
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 |
# File 'lib/active_support/cache/couchbase_store.rb', line 307 def write_entry(key, value, ) # :nodoc: method = if [:unless_exists] || [:unless_exist] :add else :set end if ttl = .delete(:expires_in) [:ttl] ||= ttl end @data.send(method, key, value, ) rescue ::Couchbase::Error::Base => e logger.error("#{e.class}: #{e.}") if logger raise if @raise_errors false end |