Class: ActiveSupport::Cache::RedisStore
- Inherits:
-
Store
- Object
- Store
- ActiveSupport::Cache::RedisStore
- Defined in:
- lib/active_support/cache/redis_store.rb
Instance Method Summary collapse
-
#clear ⇒ Object
Clear all the data from the store.
-
#decrement(key, amount = 1) ⇒ Object
Decrement a key in the store.
-
#delete_matched(matcher, options = nil) ⇒ Object
Delete objects for matched keys.
-
#exist?(name, options = nil) ⇒ Boolean
fixed problem with invalid exists? method github.com/rails/rails/commit/cad2c8f5791d5bd4af0f240d96e00bae76eabd2f.
- #expire(key, ttl) ⇒ Object
-
#increment(key, amount = 1) ⇒ Object
Increment a key in the store.
-
#initialize(*addresses) ⇒ RedisStore
constructor
Instantiate the store.
-
#read_multi(*names) ⇒ Object
Reads multiple keys from the cache using a single call to the servers for all keys.
-
#reconnect ⇒ Object
Force client reconnection, useful Unicorn deployed apps.
- #stats ⇒ Object
- #write(name, value, options = nil) ⇒ Object
Constructor Details
permalink #initialize(*addresses) ⇒ RedisStore
Instantiate the store.
Example:
RedisStore.new
# => host: localhost, port: 6379, db: 0
RedisStore.new "example.com"
# => host: example.com, port: 6379, db: 0
RedisStore.new "example.com:23682"
# => host: example.com, port: 23682, db: 0
RedisStore.new "example.com:23682/1"
# => host: example.com, port: 23682, db: 1
RedisStore.new "example.com:23682/1/theplaylist"
# => host: example.com, port: 23682, db: 1, namespace: theplaylist
RedisStore.new "localhost:6379/0", "localhost:6380/0"
# => instantiate a cluster
27 28 29 30 |
# File 'lib/active_support/cache/redis_store.rb', line 27 def initialize(*addresses) @data = ::Redis::Store::Factory.create(addresses) super(addresses.) end |
Instance Method Details
permalink #clear ⇒ Object
Clear all the data from the store.
138 139 140 141 142 |
# File 'lib/active_support/cache/redis_store.rb', line 138 def clear instrument(:clear, nil, nil) do @data.flushdb end end |
permalink #decrement(key, amount = 1) ⇒ Object
Decrement a key in the store
If the key doesn’t exist it will be initialized on 0. If the key exist but it isn’t a Fixnum it will be initialized on 0.
Example:
We have two objects in cache:
counter # => 23
rabbit # => #<Rabbit:0x5eee6c>
cache.decrement "counter"
cache.read "counter", :raw => true # => "22"
cache.decrement "counter", 2
cache.read "counter", :raw => true # => "20"
cache.decrement "a counter"
cache.read "a counter", :raw => true # => "-1"
cache.decrement "rabbit"
cache.read "rabbit", :raw => true # => "-1"
127 128 129 130 131 |
# File 'lib/active_support/cache/redis_store.rb', line 127 def decrement(key, amount = 1) instrument(:decrement, key, :amount => amount) do @data.decrby key, amount end end |
permalink #delete_matched(matcher, options = nil) ⇒ Object
Delete objects for matched keys.
Performance note: this operation can be dangerous for large production databases, as it uses the Redis “KEYS” command, which is O(N) over the total number of keys in the database. Users of large Redis caches should avoid this method.
Example:
cache.del_matched "rab*"
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/active_support/cache/redis_store.rb', line 49 def delete_matched(matcher, = nil) = () instrument(:delete_matched, matcher.inspect) do matcher = key_matcher(matcher, ) begin !(keys = @data.keys(matcher)).empty? && @data.del(*keys) rescue Errno::ECONNREFUSED => e false end end end |
permalink #exist?(name, options = nil) ⇒ Boolean
fixed problem with invalid exists? method github.com/rails/rails/commit/cad2c8f5791d5bd4af0f240d96e00bae76eabd2f
146 147 148 149 |
# File 'lib/active_support/cache/redis_store.rb', line 146 def exist?(name, = nil) res = super(name, ) res || false end |
permalink #expire(key, ttl) ⇒ Object
[View source]
133 134 135 |
# File 'lib/active_support/cache/redis_store.rb', line 133 def expire(key, ttl) @data.expire key, ttl end |
permalink #increment(key, amount = 1) ⇒ Object
Increment a key in the store.
If the key doesn’t exist it will be initialized on 0. If the key exist but it isn’t a Fixnum it will be initialized on 0.
Example:
We have two objects in cache:
counter # => 23
rabbit # => #<Rabbit:0x5eee6c>
cache.increment "counter"
cache.read "counter", :raw => true # => "24"
cache.increment "counter", 6
cache.read "counter", :raw => true # => "30"
cache.increment "a counter"
cache.read "a counter", :raw => true # => "1"
cache.increment "rabbit"
cache.read "rabbit", :raw => true # => "1"
100 101 102 103 104 |
# File 'lib/active_support/cache/redis_store.rb', line 100 def increment(key, amount = 1) instrument(:increment, key, :amount => amount) do @data.incrby key, amount end end |
permalink #read_multi(*names) ⇒ Object
Reads multiple keys from the cache using a single call to the servers for all keys. Options can be passed in the last argument.
Example:
cache.read_multi "rabbit", "white-rabbit"
cache.read_multi "rabbit", "white-rabbit", :raw => true
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/active_support/cache/redis_store.rb', line 67 def read_multi(*names) values = @data.mget(*names) values.map! { |v| v.is_a?(ActiveSupport::Cache::Entry) ? v.value : v } # Remove the options hash before mapping keys to values names. result = Hash[names.zip(values)] result.reject!{ |k,v| v.nil? } result end |
permalink #reconnect ⇒ Object
Force client reconnection, useful Unicorn deployed apps.
156 157 158 |
# File 'lib/active_support/cache/redis_store.rb', line 156 def reconnect @data.reconnect end |
permalink #stats ⇒ Object
[View source]
151 152 153 |
# File 'lib/active_support/cache/redis_store.rb', line 151 def stats @data.info end |
permalink #write(name, value, options = nil) ⇒ Object
[View source]
32 33 34 35 36 37 38 |
# File 'lib/active_support/cache/redis_store.rb', line 32 def write(name, value, = nil) = () instrument(:write, name, ) do |payload| entry = [:raw].present? ? value : Entry.new(value, ) write_entry(namespaced_key(name, ), entry, ) end end |