You are on page 1of 87

serwer struktur danych w praktyce

poniedziaek, 11 lipca 2011

CZE!
jestem lip.

poniedziaek, 11 lipca 2011

PLAN
co to jest redis? typy danych zabjcze cechy redis a memcached redis w praktyce tips & tricks
poniedziaek, 11 lipca 2011

NOSQL

poniedziaek, 11 lipca 2011

REDIS TO...

zaawansowany system klucz-warto

poniedziaek, 11 lipca 2011

REDIS TO...

serwer struktur danych

poniedziaek, 11 lipca 2011

@ANTIREZ
@pnoordhuis

poniedziaek, 11 lipca 2011

poniedziaek, 11 lipca 2011

YYY...

poniedziaek, 11 lipca 2011

poniedziaek, 11 lipca 2011

STRUKTURY DANYCH

poniedziaek, 11 lipca 2011

STRING

poniedziaek, 11 lipca 2011

STRING
redis> SET my:key "value" redis> GET my:key "value"

poniedziaek, 11 lipca 2011

STRING
redis> SET my:incr "10" redis> INCR my:incr redis> GET my:incr "11"

poniedziaek, 11 lipca 2011

STRING
redis> SET hello:world "Web" redis> APPEND hello:world "Clusters" redis> GET hello:world "WebClusters" redis> GETRANGE hello:world 0 2 "Web"

poniedziaek, 11 lipca 2011

LIST

poniedziaek, 11 lipca 2011

LIST
redis> LPUSH list a redis> LPUSH list b redis> RPUSH list c redis> LRANGE list 0 2 1) "b" 2) "a" 3) "c

poniedziaek, 11 lipca 2011

LIST
redis> LPUSH list a redis> LPUSH list b redis> RPUSH list c redis> RPOPLPUSH list other:list "a" redis> LRANGE list 0 3 1) "c" 2) "b" redis> LRANGE other:list 0 3 1) "a"
poniedziaek, 11 lipca 2011

SET

poniedziaek, 11 lipca 2011

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:tag 1) "redis"

poniedziaek, 11 lipca 2011

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> SUNIONSTORE tag post:1:tag post:2:tag redis> SMEMBERS tag 1) "rails" 2) "redis" 3) "resque" 4) "ruby"
poniedziaek, 11 lipca 2011

ZSET

poniedziaek, 11 lipca 2011

ZSET
redis> ZADD zset 1 3 redis> ZADD zset 2 2 redis> ZADD zset 3 1 redis> ZRANGE zset 0 -1 1) "3" 2) "2" 3) "1"

poniedziaek, 11 lipca 2011

HASH

poniedziaek, 11 lipca 2011

HASH
redis> HMSET hash string:1 Hello string:2 WebClusters redis> HGETALL hash 1) "string:1" 2) "Hello" 3) "string:2" 4) "WebClusters"

poniedziaek, 11 lipca 2011

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

poniedziaek, 11 lipca 2011

RTFM

poniedziaek, 11 lipca 2011

poniedziaek, 11 lipca 2011

poniedziaek, 11 lipca 2011

poniedziaek, 11 lipca 2011

ZABJCZE CECHY

poniedziaek, 11 lipca 2011

TRANSAKCJE

poniedziaek, 11 lipca 2011

TRANSAKCJE
redis> SET account:1 30 redis> SET account:2 45 redis> MULTI redis> INCRBY account:1 15 QUEUED redis> DECRBY account:2 15 QUEUED redis> EXEC 1) (integer) 45 2) (integer) 30
poniedziaek, 11 lipca 2011

PERSYSTENCJA

poniedziaek, 11 lipca 2011

PERSYSTENCJA

snapshot append-only le

poniedziaek, 11 lipca 2011

PERSYSTENCJA

na danie okresowa

poniedziaek, 11 lipca 2011

REPLIKACJA

poniedziaek, 11 lipca 2011

REPLIKACJA

poniedziaek, 11 lipca 2011

PIPELINING

poniedziaek, 11 lipca 2011

PIPELINING

poniedziaek, 11 lipca 2011

http://www.ickr.com/photos/chadelliott2012/5659144073/ poniedziaek, 11 lipca 2011

PIPELINING

poniedziaek, 11 lipca 2011

PAMI WIRTUALNA

poniedziaek, 11 lipca 2011

PAMI WIRTUALNA

poniedziaek, 11 lipca 2011

KLASTROWANIE

poniedziaek, 11 lipca 2011

http://www.ickr.com/photos/15708236@N07/2754478731/ poniedziaek, 11 lipca 2011

http://www.ickr.com/photos/dan4th/301092024/ poniedziaek, 11 lipca 2011

4096 #

poniedziaek, 11 lipca 2011

KLASTROWANIE

poniedziaek, 11 lipca 2011

KLASTROWANIE
redis> #1 GET foo -MOVED 3 192.168.1.1:6391 redis> #2 GET foo "bar"

poniedziaek, 11 lipca 2011

KLASTROWANIE
redis> #1 CLUSTER HINTS * magic * redis> #2 GET foo "bar"

poniedziaek, 11 lipca 2011

REDIS-TRIB

poniedziaek, 11 lipca 2011

MEMCACHED?

poniedziaek, 11 lipca 2011

X 100 000

poniedziaek, 11 lipca 2011

SET

memcached

redis

6.926125 s

8.470477 s

poniedziaek, 11 lipca 2011

PIPELINE SET

memcached

redis

6.926125 s

0.916335 s

poniedziaek, 11 lipca 2011

GET

memcached

redis

6.904938 s

7.572058 s

poniedziaek, 11 lipca 2011

PIPELINE GET

memcached

redis

6.904938 s

0.651953 s

poniedziaek, 11 lipca 2011

MGET

memcached

redis

1.010348 s

0.185136 s

poniedziaek, 11 lipca 2011

RAM

memcached

redis

436 KB

1.1 MB

poniedziaek, 11 lipca 2011

RAM

k 17 - 22 bajty v 19 - 24 bajty

poniedziaek, 11 lipca 2011

STRING

memcached

redis

14 MB

13.9 MB

poniedziaek, 11 lipca 2011

INTEGER

memcached

redis

11 MB

10.7 MB

poniedziaek, 11 lipca 2011

HASH

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

poniedziaek, 11 lipca 2011

HASH

memcached

redis

11 MB

9 MB

poniedziaek, 11 lipca 2011

PRAKTYKA

poniedziaek, 11 lipca 2011

RESQUE

poniedziaek, 11 lipca 2011

RESTMQ

poniedziaek, 11 lipca 2011

TWITTER

poniedziaek, 11 lipca 2011

WHOS ONLINE?

poniedziaek, 11 lipca 2011

STATYSTYKI

poniedziaek, 11 lipca 2011

WYSZUKIWANIE

poniedziaek, 11 lipca 2011

SOCIAL GRAPH

poniedziaek, 11 lipca 2011

TIPS & TRICKS

poniedziaek, 11 lipca 2011

640K ought to be enough for anybody


poniedziaek, 11 lipca 2011

3 != 3
poniedziaek, 11 lipca 2011

32 > 64
W BITACH
poniedziaek, 11 lipca 2011

http://www.ickr.com/photos/memestate/45986749/ poniedziaek, 11 lipca 2011

ONE MORE THING

poniedziaek, 11 lipca 2011

poniedziaek, 11 lipca 2011

http://www.ickr.com/photos/15708236@N07/2754478731/ poniedziaek, 11 lipca 2011

-- hello.lua -- the rst program in every language io.write("Hello world, from ",_VERSION,"!\n")

poniedziaek, 11 lipca 2011

redis = Redis.new script = <<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 value LUA redis.set :x, 4 5.times { puts(redis.eval(script, 1, :x, 0)) }
poniedziaek, 11 lipca 2011

~/Code/webclusters-redis master $ ./run lua.rb 3 2 1 0 0

poniedziaek, 11 lipca 2011

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

poniedziaek, 11 lipca 2011

poniedziaek, 11 lipca 2011

O CZYM ZAPOMNIAEM?

poniedziaek, 11 lipca 2011

You might also like