Professional Documents
Culture Documents
REDIS
ridiculously fast
master-slave replication
based on
http://github.com/blog/677
http://github.com/bvandenbos/redis_feature_control
Tuesday, August 10, 2010
Rediswitch.features << :super_secret
Rediswitch.features << :payment_gateway
Rediswitch.features << :twitter
if Rediswitch.enabled?(:twitter)
# post to twitter
else
# failwhale ahoy!
end
def self.enable(feature)
$redis.incr(feature)
end
def self.disable(feature)
$redis.del(feature)
end
end
http://github.com/jamesgolick/rollout
soon to be in place at
http://hoptoadapp.com
Tuesday, August 10, 2010
class Choker
def restrict?
track
count_for > 60
end
end
based off
http://www.production-hacks.com/2010/07/10/redis-api-access-logger/
based on
http://github.com/defunkt/resque
Tuesday, August 10, 2010
class Staple
@queue = :default
def process_with_stapler
Resque.enqueue(Staple, self.id, @tempfile)
end
end
def pop(queue)
decode redis.lpop("q:#{queue}")
end
end
def bpop(queue)
decode redis.blpop("q:#{queue}")
end
end
a new feature at
http://hoptoadapp.com
Tuesday, August 10, 2010
# text :globals, :default => '', :null => false
["MySQL::Error",
"MemCache::Error",
"Net::HTTPFatalError"]
def has_global?(name)
$redis.sismember(global_key, name)
end
end
def save_globals
$redis.del global_key
@globals.each do |g|
$redis.sadd global_key, g
end
end
end
[]
SADD
[Mysql::Error]
SADD
SADD
[Mysql::Error, OpenURI::HTTPError]
SISMEMBER
SADD
SADD
[Mysql::Error, OpenURI::HTTPError] []
DEL
SADD
SISMEMBER
SADD
EXEC
[Mysql::Error, OpenURI::HTTPError]
def save_globals
$redis.multi do
$redis.del global_key
@globals.each do |g|
$redis.sadd global_key, g
end
end
end
end
based on
http://github.com/laktek/realie
Tuesday, August 10, 2010
# usage: ruby pub.rb room username
% ruby sub.rb
#rubymidwest - [qrush]: i give up, i hate markdown
#rubyonrails - [railsn00b]: undefined method posts_path? wtf?
#rubymidwest - [turbage]: seriously.
based on
http://github.com/mattmatt/relink
Tuesday, August 10, 2010
require 'sinatra'
require 'redis_url'
post '/' do
RedisUrl.new(params[:url]).save
end
def initialize(url)
@url = url
@id = seed # unique string algorithm
end
def save
$redis.set("relink.url|#{@id}", @url)
$redis.set("relink.url.rev|#{@url}", @id)
end
end
def clicked
$redis.incr("relink.url.clicks|#{@id}")
end
end
based on
http://github.com/quirkey/redisk
Tuesday, August 10, 2010
def after_save
begin
# make request to external service
rescue Exception => ex
logger.error "this shouldn't ever happen!"
logger.error ex
logger.error ex.backtrace
end
end
require 'redisk'
path = "#{Rails.env}.log"
config.logger = Redisk::Logger.new(path)
def self.readlines(name)
redis.lrange("#{name}:_list", 0, -1)
end
end
based on
http://github.com/rubygems/gemcutter
Tuesday, August 10, 2010
# bad idea, dude
dls = Hash[*$redis.zrange("yesterday",
0, -1,
:with_scores => true)]
# returns...
{
"2010-07-09" => 1908,
"2010-07-10" => 1032,
"2010-07-11" => 1091,
}