#!/usr/bin/ruby # # Add the same three tests over and over again. # # require "redis" @redis = Redis.new(:host => "127.0.0.1") x = [] # # Queue loads of tests # (1..10).to_a.each do |i| x.push( "test #{i}" ) end loop do x.each do |test| @redis.watch('zset') print "adding #{test}" # # This is run in a loop, as we have to wait until both # # (a) the score is missing # (b) the zadd function succeeds # loop do # # Print a dot for each go through the loop # print "." # # Only update if no score is set # if !@redis.zscore("zset", test) # # If MULTI returns nil, the transaction failed, so we need to try # again. # break unless @redis.multi do |r| @redis.zadd('zset', Time.now.to_f, test) end.nil? end # # This could be tighter.. # sleep 0.1 end print "\n" # # Do we need to unwatch here? # @redis.unwatch end end