Filip Tepper - Redis

87
serwer struktur danych w praktyce poniedziałek, 11 lipca 2011

description

serwer struktur danych w praktyceponiedziałek, 11 lipca 2011CZEŚĆ!jestem filip.poniedziałek, 11 lipca 2011PLANco to jest redis? typy danych zabójcze cechy redis a memcached redis w praktyce tips & tricksponiedziałek, 11 lipca 2011NOSQLponiedziałek, 11 lipca 2011REDIS TO...zaawansowany system klucz-wartośćponiedziałek, 11 lipca 2011REDIS TO...serwer struktur danychponiedziałek, 11 lipca 2011@ANTIREZ@pnoordhuisponiedziałek, 11 lipca 2011poniedziałek, 11 lipc

Transcript of Filip Tepper - Redis

Page 1: Filip Tepper - Redis

serwer struktur danych w praktyce

poniedziałek, 11 lipca 2011

Page 2: Filip Tepper - Redis

CZEŚĆ!jestem filip.

poniedziałek, 11 lipca 2011

Page 3: Filip Tepper - Redis

PLAN

co to jest redis?

typy danych

zabójcze cechy

redis a memcached

redis w praktyce

tips & tricks

poniedziałek, 11 lipca 2011

Page 4: Filip Tepper - Redis

NOSQL

poniedziałek, 11 lipca 2011

Page 5: Filip Tepper - Redis

REDIS TO...

zaawansowany system klucz-wartość

poniedziałek, 11 lipca 2011

Page 6: Filip Tepper - Redis

REDIS TO...

serwer struktur danych

poniedziałek, 11 lipca 2011

Page 7: Filip Tepper - Redis

@ANTIREZ@pnoordhuis

poniedziałek, 11 lipca 2011

Page 8: Filip Tepper - Redis

poniedziałek, 11 lipca 2011

Page 9: Filip Tepper - Redis

YYY...

poniedziałek, 11 lipca 2011

Page 10: Filip Tepper - Redis

poniedziałek, 11 lipca 2011

Page 11: Filip Tepper - Redis

STRUKTURY DANYCH

poniedziałek, 11 lipca 2011

Page 12: Filip Tepper - Redis

STRING

poniedziałek, 11 lipca 2011

Page 13: Filip Tepper - Redis

STRING

redis> SET my:key "value"

redis> GET my:key"value"

poniedziałek, 11 lipca 2011

Page 14: Filip Tepper - Redis

STRING

redis> SET my:incr "10"

redis> INCR my:incr

redis> GET my:incr"11"

poniedziałek, 11 lipca 2011

Page 15: Filip Tepper - Redis

STRING

redis> SET hello:world "Web"

redis> APPEND hello:world "Clusters"

redis> GET hello:world"WebClusters"

redis> GETRANGE hello:world 0 2"Web"

poniedziałek, 11 lipca 2011

Page 16: Filip Tepper - Redis

LIST

poniedziałek, 11 lipca 2011

Page 17: Filip Tepper - Redis

LIST

redis> LPUSH list aredis> LPUSH list bredis> RPUSH list c

redis> LRANGE list 0 21) "b"2) "a"3) "c

poniedziałek, 11 lipca 2011

Page 18: Filip Tepper - Redis

LISTredis> LPUSH list aredis> LPUSH list bredis> RPUSH list c

redis> RPOPLPUSH list other:list"a"

redis> LRANGE list 0 31) "c"2) "b"

redis> LRANGE other:list 0 31) "a"

poniedziałek, 11 lipca 2011

Page 19: Filip Tepper - Redis

SET

poniedziałek, 11 lipca 2011

Page 20: Filip Tepper - Redis

SET

redis> SADD post:1:tag "ruby"redis> SADD post:1:tag "rails"redis> SADD post:1:tag "redis"

redis> SADD post:2:tag "redis"redis> SADD post:2:tag "resque"

redis> SINTER post:1:tag post:2:tag1) "redis"

poniedziałek, 11 lipca 2011

Page 21: Filip Tepper - Redis

SETredis> SADD post:1:tag "ruby"redis> SADD post:1:tag "rails"redis> SADD post:1:tag "redis"

redis> SADD post:2:tag "redis"redis> SADD post:2:tag "resque"

redis> SUNIONSTORE tag post:1:tag post:2:tagredis> SMEMBERS tag1) "rails"2) "redis"3) "resque"4) "ruby"

poniedziałek, 11 lipca 2011

Page 22: Filip Tepper - Redis

ZSET

poniedziałek, 11 lipca 2011

Page 23: Filip Tepper - Redis

ZSET

redis> ZADD zset 1 3redis> ZADD zset 2 2redis> ZADD zset 3 1

redis> ZRANGE zset 0 -11) "3"2) "2"3) "1"

poniedziałek, 11 lipca 2011

Page 24: Filip Tepper - Redis

HASH

poniedziałek, 11 lipca 2011

Page 25: Filip Tepper - Redis

HASH

redis> HMSET hash string:1 Hello string:2 WebClusters

redis> HGETALL hash1) "string:1"2) "Hello"3) "string:2"4) "WebClusters"

poniedziałek, 11 lipca 2011

Page 26: Filip Tepper - Redis

HASH

redis> HSET hash string:1 Byeredis> HSET hash string:3 2011

redis> HGETALL hash1) "string:1"2) "Bye"3) "string:2"4) "WebClusters"5) "string:3"6) "2011"

poniedziałek, 11 lipca 2011

Page 27: Filip Tepper - Redis

RTFM

poniedziałek, 11 lipca 2011

Page 28: Filip Tepper - Redis

poniedziałek, 11 lipca 2011

Page 29: Filip Tepper - Redis

poniedziałek, 11 lipca 2011

Page 30: Filip Tepper - Redis

poniedziałek, 11 lipca 2011

Page 31: Filip Tepper - Redis

ZABÓJCZE CECHY

poniedziałek, 11 lipca 2011

Page 32: Filip Tepper - Redis

TRANSAKCJE

poniedziałek, 11 lipca 2011

Page 33: Filip Tepper - Redis

TRANSAKCJEredis> SET account:1 30redis> SET account:2 45

redis> MULTIredis> INCRBY account:1 15QUEUED

redis> DECRBY account:2 15QUEUED

redis> EXEC1) (integer) 452) (integer) 30

poniedziałek, 11 lipca 2011

Page 34: Filip Tepper - Redis

PERSYSTENCJA

poniedziałek, 11 lipca 2011

Page 35: Filip Tepper - Redis

PERSYSTENCJA

snapshot

append-only file

poniedziałek, 11 lipca 2011

Page 36: Filip Tepper - Redis

PERSYSTENCJA

na żądanie

okresowa

poniedziałek, 11 lipca 2011

Page 37: Filip Tepper - Redis

REPLIKACJA

poniedziałek, 11 lipca 2011

Page 38: Filip Tepper - Redis

REPLIKACJA

poniedziałek, 11 lipca 2011

Page 39: Filip Tepper - Redis

PIPELINING

poniedziałek, 11 lipca 2011

Page 40: Filip Tepper - Redis

PIPELINING

poniedziałek, 11 lipca 2011

Page 41: Filip Tepper - Redis

http://www.flickr.com/photos/chadelliott2012/5659144073/

poniedziałek, 11 lipca 2011

Page 42: Filip Tepper - Redis

PIPELINING

poniedziałek, 11 lipca 2011

Page 43: Filip Tepper - Redis

PAMIĘĆ WIRTUALNA

poniedziałek, 11 lipca 2011

Page 44: Filip Tepper - Redis

PAMIĘĆ WIRTUALNA

poniedziałek, 11 lipca 2011

Page 45: Filip Tepper - Redis

KLASTROWANIE

poniedziałek, 11 lipca 2011

Page 46: Filip Tepper - Redis

http://www.flickr.com/photos/15708236@N07/2754478731/

poniedziałek, 11 lipca 2011

Page 47: Filip Tepper - Redis

http://www.flickr.com/photos/dan4th/301092024/

poniedziałek, 11 lipca 2011

Page 48: Filip Tepper - Redis

4096 #

poniedziałek, 11 lipca 2011

Page 49: Filip Tepper - Redis

KLASTROWANIE

poniedziałek, 11 lipca 2011

Page 50: Filip Tepper - Redis

KLASTROWANIE

redis> #1 GET foo-MOVED 3 192.168.1.1:6391

redis> #2 GET foo"bar"

poniedziałek, 11 lipca 2011

Page 51: Filip Tepper - Redis

KLASTROWANIE

redis> #1 CLUSTER HINTS* magic *

redis> #2 GET foo"bar"

poniedziałek, 11 lipca 2011

Page 52: Filip Tepper - Redis

REDIS-TRIB

poniedziałek, 11 lipca 2011

Page 53: Filip Tepper - Redis

MEMCACHED?

poniedziałek, 11 lipca 2011

Page 54: Filip Tepper - Redis

X 100 000

poniedziałek, 11 lipca 2011

Page 55: Filip Tepper - Redis

SET

memcached redis

6.926125 s 8.470477 s

poniedziałek, 11 lipca 2011

Page 56: Filip Tepper - Redis

PIPELINE SET

memcached redis

6.926125 s 0.916335 s

poniedziałek, 11 lipca 2011

Page 57: Filip Tepper - Redis

GET

memcached redis

6.904938 s 7.572058 s

poniedziałek, 11 lipca 2011

Page 58: Filip Tepper - Redis

PIPELINE GET

memcached redis

6.904938 s 0.651953 s

poniedziałek, 11 lipca 2011

Page 59: Filip Tepper - Redis

MGET

memcached redis

1.010348 s 0.185136 s

poniedziałek, 11 lipca 2011

Page 60: Filip Tepper - Redis

RAM

memcached redis

436 KB 1.1 MB

poniedziałek, 11 lipca 2011

Page 61: Filip Tepper - Redis

RAM

k 17 - 22 bajty

v 19 - 24 bajty

poniedziałek, 11 lipca 2011

Page 62: Filip Tepper - Redis

STRING

memcached redis

14 MB 13.9 MB

poniedziałek, 11 lipca 2011

Page 63: Filip Tepper - Redis

INTEGER

memcached redis

11 MB 10.7 MB

poniedziałek, 11 lipca 2011

Page 64: Filip Tepper - Redis

HASH

"an-average-key-1" => "1""an-average-key" => "1": "1"

poniedziałek, 11 lipca 2011

Page 65: Filip Tepper - Redis

HASH

memcached redis

11 MB 9 MB

poniedziałek, 11 lipca 2011

Page 66: Filip Tepper - Redis

PRAKTYKA

poniedziałek, 11 lipca 2011

Page 67: Filip Tepper - Redis

RESQUE

poniedziałek, 11 lipca 2011

Page 68: Filip Tepper - Redis

RESTMQ

poniedziałek, 11 lipca 2011

Page 69: Filip Tepper - Redis

TWITTER

poniedziałek, 11 lipca 2011

Page 70: Filip Tepper - Redis

WHO’S ONLINE?

poniedziałek, 11 lipca 2011

Page 71: Filip Tepper - Redis

STATYSTYKI

poniedziałek, 11 lipca 2011

Page 72: Filip Tepper - Redis

WYSZUKIWANIE

poniedziałek, 11 lipca 2011

Page 73: Filip Tepper - Redis

SOCIAL GRAPH

poniedziałek, 11 lipca 2011

Page 74: Filip Tepper - Redis

TIPS & TRICKS

poniedziałek, 11 lipca 2011

Page 75: Filip Tepper - Redis

640K ought to be enough for anybody

poniedziałek, 11 lipca 2011

Page 76: Filip Tepper - Redis

3 != “3”poniedziałek, 11 lipca 2011

Page 77: Filip Tepper - Redis

32 > 64W BITACH

poniedziałek, 11 lipca 2011

Page 78: Filip Tepper - Redis

http://www.flickr.com/photos/memestate/45986749/

poniedziałek, 11 lipca 2011

Page 79: Filip Tepper - Redis

ONE MORE THING

poniedziałek, 11 lipca 2011

Page 80: Filip Tepper - Redis

poniedziałek, 11 lipca 2011

Page 81: Filip Tepper - Redis

http://www.flickr.com/photos/15708236@N07/2754478731/

poniedziałek, 11 lipca 2011

Page 82: Filip Tepper - Redis

-- hello.lua-- the first program in every language

io.write("Hello world, from ",_VERSION,"!\n")

poniedziałek, 11 lipca 2011

Page 83: Filip Tepper - Redis

redis = Redis.newscript = <<LUA local value = tonumber(redis.call('get', KEYS[1])) if value == nil then return {err = "Value at key is not integer"} end if value > tonumber(ARGV[1]) then value = value - 1 redis.call('set', KEYS[1], value) end return valueLUA

redis.set :x, 45.times { puts(redis.eval(script, 1, :x, 0)) }

poniedziałek, 11 lipca 2011

Page 84: Filip Tepper - Redis

~/Code/webclusters-redis master $ ./run lua.rb32100

poniedziałek, 11 lipca 2011

Page 85: Filip Tepper - Redis

https://github.com/filiptepper/webclusters-redis

poniedziałek, 11 lipca 2011

Page 86: Filip Tepper - Redis

poniedziałek, 11 lipca 2011

Page 87: Filip Tepper - Redis

O CZYM ZAPOMNIAŁEM?

poniedziałek, 11 lipca 2011