class ActionDispatch::Session::LibmemcachedStore
Public Class Methods
new(app, options = {})
click to toggle source
Calls superclass method
# File lib/action_dispatch/session/libmemcached_store.rb, line 8 def initialize(app, options = {}) options[:expire_after] ||= options[:expires] super client_options = { default_ttl: options.fetch(:expire_after, 0) } client_options[:prefix_key] = options[:prefix_key] || options[:namespace] || 'rack:session' @mutex = Mutex.new @pool = options[:cache] || Memcached.new(@default_options[:memcache_server], client_options) end
Private Instance Methods
destroy(env)
click to toggle source
Deprecated since Rails 3.1.0
# File lib/action_dispatch/session/libmemcached_store.rb, line 61 def destroy(env) if sid = current_session_id(env) with_lock(env, false) do @pool.delete(sid) end end end
destroy_session(env, session_id, options = {})
click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 51 def destroy_session(env, session_id, options = {}) with_lock(env, nil) do @pool.delete(session_id) generate_sid unless options[:drop] end end
generate_sid()
click to toggle source
Calls superclass method
# File lib/action_dispatch/session/libmemcached_store.rb, line 19 def generate_sid loop do sid = super begin @pool.exist(sid) rescue Memcached::NotFound break sid end end end
get_session(env, sid)
click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 30 def get_session(env, sid) sid ||= generate_sid session = with_lock(env, {}) do begin @pool.get(sid) rescue Memcached::NotFound {} end end [sid, session] end
set_session(env, session_id, new_session, options = {})
click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 42 def set_session(env, session_id, new_session, options = {}) expiry = options[:expire_after].to_i with_lock(env, false) do @pool.set(session_id, new_session, expiry) session_id end end
with_lock(env, default) { || ... }
click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 69 def with_lock(env, default) @mutex.lock if env['rack.multithread'] yield rescue Memcached::Error => e default ensure @mutex.unlock if @mutex.locked? end