Slide 1

Slide 1 text

Redis Data Cheeseburgers

Slide 2

Slide 2 text

Redis Data Cheeseburgers 1/43 - 3%

Slide 3

Slide 3 text

Nick Quaranto 2/43 - 5%

Slide 4

Slide 4 text

3/43 - 7%

Slide 5

Slide 5 text

rubygems.org 4/43 - 10%

Slide 6

Slide 6 text

@qrush [email protected] litanyagainstfear.com 5/43 - 12%

Slide 7

Slide 7 text

Redis 6/43 - 14%

Slide 8

Slide 8 text

no 7/43 - 17%

Slide 9

Slide 9 text

yes 8/43 - 19%

Slide 10

Slide 10 text

persist data as you think of it 9/43 - 21%

Slide 11

Slide 11 text

LRANGE 0 -1 basics data types use cases 10/43 - 24%

Slide 12

Slide 12 text

basics 11/43 - 26%

Slide 13

Slide 13 text

history 12/43 - 28%

Slide 14

Slide 14 text

installing 13/43 - 31%

Slide 15

Slide 15 text

drivers ruby python java php node.js ... 14/43 - 33%

Slide 16

Slide 16 text

memory keys, values keys must stay in memory values can be swapped really stable 15/43 - 35%

Slide 17

Slide 17 text

speed ANSI C 110,000 SETs/second 81,000 GETs/second pipelining 16/43 - 38%

Slide 18

Slide 18 text

misc 17/43 - 40%

Slide 19

Slide 19 text

data types 18/43 - 42%

Slide 20

Slide 20 text

strings like memcached simple data expiration renaming multiple get/set 19/43 - 45%

Slide 21

Slide 21 text

> set fries done OK > get fries done > del fries 1 > set fries done OK > expire 60 1 > get fries nil 20/43 - 47%

Slide 22

Slide 22 text

counters incr incrby decr decrby completely atomic 21/43 - 49%

Slide 23

Slide 23 text

> incr burgers 1 > incrby burgers 42 43 > decr burgers 42 22/43 - 52%

Slide 24

Slide 24 text

lists push/pop length random access ranges 23/43 - 54%

Slide 25

Slide 25 text

> rpush order burger 1 > rpush order hotdog 2 > rpush order fries 3 > lrange order 0 -1 1. burger 2. hotdog 3. fries > lpop order burger > rpop order fries > lindex order 0 hotdog 24/43 - 56%

Slide 26

Slide 26 text

sets unique elements basic functionality from lists intersect union difference 25/43 - 59%

Slide 27

Slide 27 text

> sadd meat bacon 1 > sadd meat turkey 1 > sadd toppings bacon 1 > sadd toppings bacon 0 > sinter meat toppings 1. bacon > sdiff meat toppings 1. turkey 26/43 - 61%

Slide 28

Slide 28 text

sorted sets (zset) {key => float} atomic increments ranges by score or rank union/intersect 27/43 - 63%

Slide 29

Slide 29 text

> zadd menu 4.99 burger 1 > zadd menu 2.99 shake 1 > zadd menu 1.99 fries 1 > zrank menu fries 0 > zscore menu fries 1.99 > zrange menu 0 -1 1. fries 2. shake 3. burger > zrangebyscore menu 2 5 1. shake 2. burger > zremrangebyscore menu 2 5 28/43 - 66%

Slide 30

Slide 30 text

hashes {key => value} atomic increments like zset set, get, del, exists, len get all keys, values, or both 29/43 - 68%

Slide 31

Slide 31 text

> hset orders nick burger 1 > hset orders john fries 1 > hget orders nick burger > hvals orders 1. burger 2. fries > hgetall orders 1. nick 2. burger 3. john 4. fries 30/43 - 70%

Slide 32

Slide 32 text

use cases 31/43 - 73%

Slide 33

Slide 33 text

boggle 32/43 - 75%

Slide 34

Slide 34 text

boggle game id, score = counter guesses, dictionary = set words for a game = list 33/43 - 77%

Slide 35

Slide 35 text

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.upcase end end end def word?(word) $redis.sismember("dict", word) end 34/43 - 80%

Slide 36

Slide 36 text

queues 35/43 - 82%

Slide 37

Slide 37 text

queues 36/43 - 84%

Slide 38

Slide 38 text

analytics 37/43 - 87%

Slide 39

Slide 39 text

analytics: gem downloads 38/43 - 89%

Slide 40

Slide 40 text

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, key 39/43 - 91%

Slide 41

Slide 41 text

daily rollover date = "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, score end 40/43 - 94%

Slide 42

Slide 42 text

wrapup 41/43 - 96%

Slide 43

Slide 43 text

redis is... really damn fast extremely useful waiting for you! 42/43 - 98%