kemal-session-redis-engine v1.2.0
forked from neovintage/kemal-session-rediskemal-session-redis-engine
Redis session store for kemal-session implemented with jgaskins/redis client.
Installation
Add this to your application's shard.yml
:
dependencies:
kemal-session-redis-engine:
github: crystal-garage/kemal-session-redis-engine
Usage
require "kemal"
require "kemal-session"
require "kemal-session-redis-engine"
Kemal::Session.config do |config|
config.cookie_name = "redis_test"
config.secret = "a_secret"
config.engine = Kemal::Session::RedisEngine.new(
"redis://localhost:6379/0?initial_pool_size=1&max_pool_size=10&checkout_timeout=10&retry_attempts=2&retry_delay=0.5&max_idle_pool_size=50",
key_prefix: "my_app:session:"
)
config.timeout = Time::Span.new(1, 0, 0)
end
get "/" do
puts "Hello World"
end
post "/sign_in" do |context|
context.session.int("see-it-works", 1)
end
Kemal.run
The engine comes with a number of configuration options:
Option | Description |
---|---|
redis_url | where your redis instance lives. defaults to redis://localhost:6379/0 |
key_prefix | when saving sessions to redis, how should the keys be namespaced. defaults to kemal:session: |
If no options are passed the RedisEngine
will try to connect to a Redis using default settings.
Best Practices
Creating a Client
It's very easy for client code to leak Redis connections and you should pass a pool of connections that's used throughout Kemal and the session engine.
Session Administration Performance
Kemal::Session.all
and Kemal::Session.each
perform a bit differently under the hood. If Kemal::Session.all
is used, the RedisEngine
will use the SCAN
command in Redis and page through all of the sessions, hydrating the Session object and returing an array of all sessions. If session storage has a large number of sessions this could have performance implications. Kemal::Session.each
also uses the SCAN
command in Redis but instead of creating one large array and enumerating through it, Kemal::Session.each
will only hydrate and yield the keys returned from the current cursor. Once that block of sessions has been yielded, RedisEngine will retrieve the next block of sessions.
Development
Redis must be running on localhost and bound to the default port to run specs.
Contributing
- Fork it ( https://github.com/crystal-garage/kemal-session-redis-engine/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- [mamantoha] Anton Maminov - maintainer
- [neovintage] Rimas Silkaitis - creator, maintainer
- [crisward] Cris Ward
- [fdocr] Fernando Valverde
kemal-session-redis-engine
- 1
- 0
- 0
- 1
- 2
- about 1 year ago
- November 7, 2022
MIT License
Sun, 24 Nov 2024 09:40:48 GMT