Slide 1

Slide 1 text

Michał Szajbe

Slide 2

Slide 2 text

Czym jest Redis? • Baza danych typu klucz-wartość# • Serwer struktur danych# • Pozwala na atomiczne operacje na danych# • Trzyma dane w pamięci operacyjnej

Slide 3

Slide 3 text

key-value store • Klucz = unikalny identyfikator# • Wartość = dane# • Analogia: hash, map, tablica asocjacyjna# • Przykład: Zbiór PESEL, książka telefoniczna

Slide 4

Slide 4 text

key-value store key1 value1 key2 value2 key3 value3

Slide 5

Slide 5 text

String • Podstawowa struktura (nie typ!) danych w Redisie# • Może zawierać dowolne dane, np. obrazy JPEG, bitmapy, tekst, serializowane obiekty# • Max 512 MB

Slide 6

Slide 6 text

String name Bydgoszcz Web SET name "Bydgoszcz Web" nr 5 SET nr 5

Slide 7

Slide 7 text

String name Bydgoszcz Web Development Meetup APPEND name " Development Meetup" GETRANGE name 10 24 Web Development

Slide 8

Slide 8 text

String nr 6.5 INCRBYFLOAT nr 0.5 nr 6 INCR nr

Slide 9

Slide 9 text

String bits1 1100 bits2 1010 BITOP AND result bits1 bits2 result 1000

Slide 10

Slide 10 text

Lista • Uporządkowana kolekcja stringów (nie tablica!)# • Możliwość dodania elementu od prawej lub lewej strony# • Bardzo szybki dostęp do skrajnych elementów, wolniejszy do środkowych - O(N) list e1 e2 e3

Slide 11

Slide 11 text

Lista RPUSH speakers Artur 
 RPUSH speakers Michał speakers Artur Michał LPUSH speakers Bartek speakers Bartek Artur Michał

Slide 12

Slide 12 text

Lista LLEN speakers 3 LRANGE speakers 0 -2 Bartek Artur RPOP speakers Michał speakers Bartek Artur

Slide 13

Slide 13 text

Przykład: Newsfeed • Chronologicznie# • Tylko 3 najświeższe wiadomości

Slide 14

Slide 14 text

Przykład: Newsfeed • Chronologicznie# • Tylko 3 najświeższe wiadomości newsfeed Fotki J. Lawrence WordPress Coś o Tusku

Slide 15

Slide 15 text

Przykład: Newsfeed LPUSH newsfeed Redis ! LTRIM newsfeed 0 3

Slide 16

Slide 16 text

Przykład: Newsfeed LPUSH newsfeed Redis ! LTRIM newsfeed 0 3 newsfeed Redis Fotki J. Lawrence WordPress

Slide 17

Slide 17 text

Zbiór (Set) • Nieuporządkowana kolekcja stringów# • Szybkie dodawanie, usuwanie i sprawdzanie istnienia elementów w zbiorze# • Tylko unikalne wartości set e1 e2 e3

Slide 18

Slide 18 text

Zbiór (Set) SADD bookmarks bdgweb.pl ! SADD bookmarks monterail.com ! SADD bookmarks codetunes.com bookmarks bdgweb.pl monterail.com codetunes.com

Slide 19

Slide 19 text

Zbiór (Set) SRANDMEMBER bookmarks codetunes.com SREM bookmarks codetunes.com SMEMBERS bookmarks bookmarks bdgweb.pl monterail.com

Slide 20

Slide 20 text

Operacje na zbiorach set1 a b c set2 a x z SUNION set1 set2 a b c x z SINTER set1 set2 a SDIFF set1 set2 b c

Slide 21

Slide 21 text

Operacje na zbiorach set1 a b c set2 a x z SMOVE set1 set2 c set1 a b set2 a x z c

Slide 22

Slide 22 text

Hash • Mapuje stringi na wartości (też stringi)# • Dobre do reprezentacji obiektów hash field1 value1 field2 value2

Slide 23

Slide 23 text

Hash HSET user name John ! HMSET user age 30 gender male user name John age 30 gender male

Slide 24

Slide 24 text

Hash HINCRBY user age 1 HMGET user name age John 31 HGET user age 31

Slide 25

Slide 25 text

Uporządkowany zbiór (Sorted Set) • Połączenie zbioru z hashem# • Każdy element ma przypisany "score"# • Elementy są automatycznie porządkowane wg score# • Przydatne do budowania rankingów, indeksowania

Slide 26

Slide 26 text

Uporządkowany zbiór (Sorted Set) clicks link1 1 link2 2 link3 4

Slide 27

Slide 27 text

Uporządkowany zbiór (Sorted Set) ZADD clicks 1 link4 ! ZINCRBY clicks 1 link1 clicks link4 1 link1 2 link2 2 link3 4

Slide 28

Slide 28 text

Uporządkowany zbiór (Sorted Set) ZRANGE clicks 0 1 link4 link1 ZREVRANGE clicks 0 1 link3 link2 ZSCORE clicks link3 4

Slide 29

Slide 29 text

Uporządkowany zbiór (Sorted Set) ZRANGEBYSCORE clicks 2 +inf WITHSCORES link1 2 link2 2 link3 4

Slide 30

Slide 30 text

Wygaszanie kluczy e87Yc0iK SET token e87Tc0iK ! EXPIRE token 5 ! GET token ! ! ! GET token (nil) po upływie 5 sekund...

Slide 31

Slide 31 text

Inne ficzery • Transakcje (poprzez kolejkowanie poleceń)# • Pub/sub# • Skryptowanie (w języku Lua)# • Sharding i replikacja

Slide 32

Slide 32 text

Przydatne linki • redis.io# • try.redis-db.com