A short introduction to Redis.
Definitely check out v2 of this talk! http://speakerdeck.com/u/qrush/p/redis-data-cheeseburgers-2
Given at BarCampRochester3 in 2010. http://barcamproc.org/
RedisData Cheeseburgers
View Slide
RedisData Cheeseburgers1/43 - 3%
Nick Quaranto2/43 - 5%
3/43 - 7%
rubygems.org4/43 - 10%
@qrush[email protected]litanyagainstfear.com5/43 - 12%
Redis6/43 - 14%
no7/43 - 17%
yes8/43 - 19%
persist data as you think of it9/43 - 21%
LRANGE 0 -1basicsdata typesuse cases10/43 - 24%
basics11/43 - 26%
history12/43 - 28%
installing13/43 - 31%
driversrubypythonjavaphpnode.js...14/43 - 33%
memorykeys, valueskeys must stay in memoryvalues can be swappedreally stable15/43 - 35%
speedANSI C110,000 SETs/second81,000 GETs/secondpipelining16/43 - 38%
misc17/43 - 40%
data types18/43 - 42%
stringslike memcachedsimple dataexpirationrenamingmultiple get/set19/43 - 45%
> set fries doneOK> get friesdone> del fries1> set fries doneOK> expire 601> get friesnil20/43 - 47%
countersincrincrbydecrdecrbycompletely atomic21/43 - 49%
> incr burgers1> incrby burgers 4243> decr burgers4222/43 - 52%
listspush/poplengthrandom accessranges23/43 - 54%
> rpush order burger1> rpush order hotdog2> rpush order fries3> lrange order 0 -11. burger2. hotdog3. fries> lpop orderburger> rpop orderfries> lindex order 0hotdog24/43 - 56%
setsunique elementsbasic functionality from listsintersectuniondifference25/43 - 59%
> sadd meat bacon1> sadd meat turkey1> sadd toppings bacon1> sadd toppings bacon0> sinter meat toppings1. bacon> sdiff meat toppings1. turkey26/43 - 61%
sorted sets (zset){key => float}atomic incrementsranges by score or rankunion/intersect27/43 - 63%
> zadd menu 4.99 burger1> zadd menu 2.99 shake1> zadd menu 1.99 fries1> zrank menu fries0> zscore menu fries1.99> zrange menu 0 -11. fries2. shake3. burger> zrangebyscore menu 2 51. shake2. burger> zremrangebyscore menu 2 528/43 - 66%
hashes{key => value}atomic increments like zsetset, get, del, exists, lenget all keys, values, or both29/43 - 68%
> hset orders nick burger1> hset orders john fries1> hget orders nickburger> hvals orders1. burger2. fries> hgetall orders1. nick2. burger3. john4. fries30/43 - 70%
use cases31/43 - 73%
boggle32/43 - 75%
bogglegame id, score = counterguesses, dictionary = setwords for a game = list33/43 - 77%
def load$redis.del "dict"dict = File.read("/usr/share/dict/words"dict.split.each do |word|if word =~ /^[a-z]{3,8}$/$redis.sadd "dict", word.upcaseendendenddef word?(word)$redis.sismember("dict", word)end34/43 - 80%
queues35/43 - 82%
queues36/43 - 84%
analytics37/43 - 87%
analytics: gem downloads38/43 - 89%
on a gem download$redis.incr "downloads"$redis.incr "downloads:rubygem:rails"key = "downloads:version:rails-2.3.5"$redis.incr key$redis.zincrby "downloads:today", 1, key39/43 - 91%
daily rolloverdate = "2010-04-02"$redis.rename "dls:today", "dls:yesterday"dls = Hash[*$redis.zrange("dls:yesterday",0, -1,"withscores")]dls.each do |key, score|ver = versions[key]$redis.hincrby ver, date, score$redis.hincrby ver.rubygem, date, scoreend40/43 - 94%
wrapup41/43 - 96%
redis is...really damn fastextremely usefulwaiting for you!42/43 - 98%