Async::Redis
An asynchronous client for Redis including TLS. Support for streaming requests and responses. Built on top of async and async-io.
Installation
$ bundle add async-redis
Usage
Basic Local Connection
require 'async/redis'
endpoint = Async::Redis.local_endpoint
client = Async::Redis::Client.new(endpoint)
Async do
pp client.info
ensure
client.close
end
Connecting to Redis SSL Endpoint
This example demonstrates parsing an environment variable with a redis://
or SSL rediss://
scheme, and demonstrates how you can specify SSL parameters on the SSLContext object.
require 'async/redis'
def make_redis_endpoint(uri)
tcp_endpoint = Async::IO::Endpoint.tcp(uri.hostname, uri.port)
case uri.scheme
when 'redis'
tcp_endpoint
when 'rediss'
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.set_params(
ca_file: "/path/to/ca.crt",
cert: OpenSSL::X509::Certificate.new(File.read("client.crt")),
key: OpenSSL::PKey::RSA.new(File.read("client.key")),
)
Async::IO::SSLEndpoint.new(tcp_endpoint, ssl_context: ssl_context)
else
raise ArgumentError
end
end
endpoint = make_redis_endpoint(URI(ENV['REDIS_URL']))
client = Async::Redis::Client.new(endpoint)
# ...
Variables
require 'async'
require 'async/redis'
endpoint = Async::Redis.local_endpoint
client = Async::Redis::Client.new(endpoint)
Async do
client.set('X', 10)
pp client.get('X')
ensure
client.close
end
Subscriptions
require 'async'
require 'async/redis'
endpoint = Async::Redis.local_endpoint
client = Async::Redis::Client.new(endpoint)
Async do |task|
condition = Async::Condition.new
publisher = task.async do
condition.wait
client.publish 'status.frontend', 'good'
end
subscriber = task.async do
client.subscribe 'status.frontend' do |context|
condition.signal # We are waiting for messages.
type, name, message = context.listen
pp type, name, message
end
end
ensure
client.close
end
Contributing
We welcome contributions to this project.
- Fork it.
- 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 new Pull Request.