Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

MEMCACHED • key-value store • in-memory • super fast

Slide 8

Slide 8 text

REDIS • key-value store • in-memory • super fast

Slide 9

Slide 9 text

REDIS • Memcached on steroids • 250 bytes 512 MB keys • 1 MB 512 MB values

Slide 10

Slide 10 text

REDIS • optional persistence (snapshotting/AOF) • replication • Lua scripting

Slide 11

Slide 11 text

REDIS • strings • hashes • lists • sets • sorted sets • bitmaps • hyperloglogs

Slide 12

Slide 12 text

#1 CONTACTS

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

MariaDB [goldenline]> DESCRIBE user_contact; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id1 | int(11) | NO | PRI | NULL | | | id2 | int(11) | NO | PRI | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)

Slide 15

Slide 15 text

#1.1 MEMCACHE 1. SELECT id2 FROM user_contact WHERE id1 = 1238102 2. implode() 3. set user.contact.1238102 0 3600 3072
 100,2256,6315,6575,7663,8222,23493,43126,46317…

Slide 16

Slide 16 text

#1.1 REDIS 1. SELECT id2 FROM user_contact WHERE id1 = 1238102 2. SADD user.1238102.friends "100" "2256" "6315" "6575"…

Slide 17

Slide 17 text

#1.2 MEMCACHE 1. get user.contact.1238102 2. explode()

Slide 18

Slide 18 text

#1.2 REDIS 1. SMEMBERS user.1238102.friends

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

#1.3 MEMCACHE 1. get user.contact.1238102 2. explode() 3. array_rand()

Slide 21

Slide 21 text

#1.3 REDIS 1. SRANDMEMBER user.1238102.friends 3

Slide 22

Slide 22 text

O(1) time complexity

Slide 23

Slide 23 text

O(N) time complexity

Slide 24

Slide 24 text

#1.4 MEMCACHE 1. get user.contact.1238102 2. explode() 3. array_push() 4. implode() 5. set user.contact.1238102 0 3600 3080
 100,2256,6315,6575,7663,8222,23493,43126,46317…

Slide 25

Slide 25 text

#1.4 REDIS 1. SADD user.1238102.friends "1159658"

Slide 26

Slide 26 text

#1.5 MEMCACHE 1. get user.contact.1238102 2. explode() 3. array_search() 4. unset() 5. implode() 6. set user.contact.1238102 0 3600 3072
 100,2256,6315,6575,7663,8222,23493,43126,46317…

Slide 27

Slide 27 text

#1.5 REDIS 1. SREM user.1238102.friends "1159658"

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

#1.6 MEMCACHE 1. get user.contact.1238102 user.contact.1159658 2. 2 x explode() 3. array_intersect()

Slide 31

Slide 31 text

#1.6 REDIS 1. SINTER user.1238102.friends user.1159658.friends

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

#1.6 MEMCACHE 1. get user.contact.1238102 user.contact.1159658 2. 2 x explode() 3. array_intersect() 4. count()

Slide 34

Slide 34 text

#1.6 REDIS 1. SINTERSTORE foo user.1238102.friends user.1159658.friends

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

#2 WVMP Who Viewed My Profile

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

MEMBER + SCORE Sorted Sets

Slide 39

Slide 39 text

#2.1 REDIS 1. ZADD user.1238102.wvmp 1447585200 "1159658"

Slide 40

Slide 40 text

#2.2 REDIS 1. ZREVRANGE user.1238102.wvmp 0 4

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

#2.3 REDIS 1. ZCOUNT user.1238102.wvmp 1444989600 +inf

Slide 44

Slide 44 text

#4 ACTIVITY

Slide 45

Slide 45 text

#4.1 REDIS 1. SETBIT 2015-11-15 1159658 1

Slide 46

Slide 46 text

#4.2 REDIS 1. BITCOUNT 2015-11-15

Slide 47

Slide 47 text

#4.3 REDIS 1. SETBIT 2015-11-14 1159658 1 2. SETBIT 2015-11-15 1159658 1 3. BITTOP AND foo 2015-11-14 2015-11-15

Slide 48

Slide 48 text

#4.3 REDIS 1. SETBIT 2015-11-14 1159658 1 2. SETBIT 2015-11-15 1159658 1 3. BITTOP OR foo 2015-11-14 2015-11-15

Slide 49

Slide 49 text

#5 DEBUG

Slide 50

Slide 50 text

#5 DEBUG redis-cli MONITOR

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

#6 PIPELINING

Slide 53

Slide 53 text

PIPELINING 1. Client: INCR X 2. Server: 1 3. Client: INCR X 4. Server: 2 5. Client: INCR X 6. Server: 3

Slide 54

Slide 54 text

PIPELINING 1. Client: INCR X 2. Client: INCR X 3. Client: INCR X 4. Server: 1 5. Server: 2 6. Server: 3

Slide 55

Slide 55 text

PIPELINING 1. Client: MULTI 2. Client: INCR X 3. Client: INCR X 4. Client: INCR X 5. Client: EXEC # [1,2,3]

Slide 56

Slide 56 text

#7 LUA

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

#PROTIP redis-cli SETBIT PHPCon 4294967295 1

Slide 59

Slide 59 text

#PROTIP use phpredis the client written in C as a PHP module

Slide 60

Slide 60 text

Q&A

Slide 61

Slide 61 text

! Obserwuj @sebgrodzicki