URI-Valkey
Creates URI objects for Valkey URLs, with support for parsing connection strings and extracting configuration parameters.
Supported URI Formats
valkey://host:port/dbindex
valkeys://host:port/dbindex # SSL
redis://host:port/dbindex # Cross-scheme compatibility
rediss://host:port/dbindex # Cross-scheme compatibility (SSL)
Installation
gem install uri-valkey
git clone git@github.com:delano/uri-valkey.git
Usage
require 'uri-valkey' # or require 'uri_valkey'
conf = URI.parse 'valkey://localhost:6379/0'
conf.scheme # => "valkey"
conf.host # => "localhost"
conf.port # => 6379
conf.db # => 0
conf.to_s # => "valkey://localhost:6379/0"
# Access configuration hash
conf.conf # => {:host=>"localhost", :port=>6379, :db=>0, :ssl=>false}
SSL Support
SSL is supported by using the valkeys
scheme:
conf = URI.parse 'valkeys://localhost:6379/0'
conf.scheme # => "valkeys"
conf.conf[:ssl] # => true
Working with Keys
The URI class supports parsing and manipulating Valkey keys:
uri = URI.parse 'valkey://localhost:6379/2/mykey:namespace'
uri.db # => 2
uri.key # => "mykey:namespace"
# Modify the key
uri.key = 'newkey:value'
uri.to_s # => "valkey://localhost:6379/2/newkey:value"
# Modify the database
uri.db = 5
uri.to_s # => "valkey://localhost:6379/5/newkey:value"
Building URIs
uri = URI::Valkey.build(host: "localhost", port: 6379, db: 2, key: "v1:arbitrary:key")
uri.to_s # => "valkey://localhost:6379/2/v1:arbitrary:key"
Query Parameters
Query parameters are supported for additional configuration:
uri = URI.parse "valkey://127.0.0.1/6/?timeout=5&retries=3"
uri.conf # => {:db=>6, :timeout=>5, :retries=>"3", :host=>"127.0.0.1", :port=>6379, :ssl=>false}
Cross-Scheme Compatibility
Both gems support each other's URL schemes for maximum flexibility:
# Valkey gem can parse Redis URLs
redis_uri = URI.parse 'redis://localhost:6379/0'
redis_uri.scheme # => "redis"
redis_uri.conf # => {:host=>"localhost", :port=>6379, :db=>0, :ssl=>false}
# SSL schemes work cross-platform
ssl_uri = URI.parse 'rediss://localhost:6379/0'
ssl_uri.conf[:ssl] # => true
URI-Redis
A uri-redis
gem is also available with identical functionality for Redis URLs, including support for valkey://
and valkeys://
schemes:
require 'uri-redis'
conf = URI.parse 'redis://localhost:6379/0'
conf.scheme # => "redis"
conf.conf # => {:host=>"localhost", :port=>6379, :db=>0, :ssl=>false}
Redis Client Integration
If you have the redis
gem installed, URI-Redis provides a refinement to add URI support directly to Redis client instances:
require 'uri-redis'
# Enable the refinement in your scope
using RedisURIRefinement
redis = Redis.new(url: 'redis://localhost:6379/2')
redis.uri # Returns URI object for the Redis client's connection
# Class method for generating URIs from configuration
Redis.uri(host: 'localhost', port: 6379, db: 2, ssl: true)
# => URI object for "rediss://localhost:6379/2"
Note: The refinement is only available when the redis
gem is loaded and only works within scopes where using RedisURIRefinement
has been called.
About
License
See LICENSE.txt