telega_storage_redis
Redis/Valkey storage adapter for the Telega Telegram Bot Library.
Fast, server-side persistence for sessions and flows on Redis or Valkey, with native TTL. Built on valkyrie and implements telega/storage.KeyValueStorage, so a single backend serves both sessions and flows.
Installation
gleam add telega_storage_redis
Usage
import gleam/erlang/process
import gleam/option.{Some}
import gleam/otp/static_supervisor as supervisor
import telega/storage
import telega_storage_redis as redis
import valkyrie
pub fn main() {
let pool_name = process.new_name("bot_redis")
let spec =
valkyrie.default_config()
|> valkyrie.supervised_pool(size: 10, name: Some(pool_name), timeout: 1000)
let assert Ok(_) =
supervisor.new(supervisor.OneForOne)
|> supervisor.add(spec)
|> supervisor.start
let kv = redis.new(valkyrie.named_connection(pool_name))
// Sessions — provide JSON encode/decode for your session type.
let session_settings =
storage.session_settings_from_storage(
storage: kv,
encode: encode_my_session,
decode: my_session_decoder(),
default: fn() { default_session() },
)
// Flows — the full instance is serialized for you.
let flow_storage = storage.flow_storage_from_storage(kv)
// ... wire `session_settings` and `flow_storage` into your bot.
}
Notes
- TTL is enforced by the server (
EXPIRE), so expired keys vanish on their own. Redis works in whole seconds, so a sub-second TTL is rounded up to one second. scanuses cursor-basedSCANover the key prefix (notKEYS), so it is safe to use against a production database.
Testing
gleam test
Integration tests connect to a local Redis on the default port. They are skipped automatically when no server is reachable.