# Redis::Stream Sugar coating Redis Streams TODO: add documentation ## Installation Add this line to your application's Gemfile: ```ruby gem 'redis-stream' ``` And then execute: $ bundle Or install it yourself as: $ gem install redis-stream ## Usage Load the stream library ```ruby require 'redis/stream' ``` Available objects ### Redis::Stream::Client ### Redis::Stream::Config ### Redis::Stream::Inspect ### Redis::Stream::Type ### Redis::Stream::DataCache #### A simple non-blocking example ```ruby require 'redis/stream' s1 = Redis::Stream::Client.new("test", "LIST", 't1') s2 = Redis::Stream::Client.new("test", "MANIFEST", 't2') s2.on_message do |message| m = message['payload'] puts "Hello #{m}" s1.stop s2.stop end s1.start(false) s2.start(false) id = s1.add("World!", "to" => "*", "group" => "MANIFEST", "type" => Redis::Stream::Type::ACTION) Timeout::timeout(10) do loop do break unless s1.running? || s2.running? sleep 1 puts "checkin if still active #{s1.running?}, #{s2.running?}" end end ``` #### Microservices example 1. Sinatra as a point of entry ``` http://127.0.0.1:4567?reverse=word``` 2. Microservice for processing # http.rb ```ruby require 'sinatra' require 'redis/stream' class GreetingsApp < Sinatra::Base configure do set :inline_templates, true set :redis_stream, Redis::Stream::Client.new("greetings", "HTTP", "http_client", "sync_start" => true, "caching" => false) end get '/' do halt 500, 'reverse parameter not found' unless params.include?(:reverse) result = settings.redis_stream.sync_add(params[:reverse], "group" => "GREETER", "time_out" => 60) @reverse = params[:reverse] @reversed = '' @reversed = result['payload'] if result && result.include?('payload') erb :index end end GreetingsApp.run! __END__ @@index
<%= @reverse %> <=> <%= @reversed %>