Top Banner
Redis: Data Cheeseburgers Nick Quaranto @qrush / [email protected]
62

Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

Mar 17, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

Redis: Data Cheeseburgers

Nick Quaranto

@qrush / [email protected]

Page 2: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

thoughtbot.com

i work at

Page 3: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

we use

Page 4: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

hoptoadapp.com

on

Page 5: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

rubygems.org

and

Page 6: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries
Page 7: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries
Page 8: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries
Page 9: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries
Page 10: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries
Page 11: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries
Page 12: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

Redis

Page 13: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

redis

“an advanced key-value

store”

Page 14: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

no

•tables

•relations

•documents

•graphs

Page 15: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

yes

data structures

Page 16: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

a big hash

_ => _

Page 17: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

really it’s just

key => data structure

Page 18: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

run commands

> GET foo

“bar”

Page 19: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

memory

•all keys & values in RAM

•sync to disk when necessary

•various levels of paranoia

Page 20: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

•data structures

•getting started

•use cases

Page 21: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

data structures

Page 22: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

strings

•like memcached

•chunk of data

•binary aware

Page 23: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> get fries(nil)

> set fries overOK

> get friesover

fries

over

fries

over

fries

Page 24: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> strlen fries4

> getrange fries 0 1ov

> append fries overdone

over

fries

over

fries

overdone

fries

Page 25: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> rename fries chipsOK

> del chips1

> exists chips0

overdone

chips

chips

chips

Page 26: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

counters

•like strings, cast to an integer

•atomic increment/decrement

•very, very fast

Page 27: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> get burgersnil

> incr burgers1

> incrby burgers 4142

burgers

1

42

burgers

burgers

Page 28: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

lists

•push, pop

•random access

•blocking actions

Page 29: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

RPUSH

LPOP

LPUSH

RPOP

thanks to peter cooper (@peterc) for the graphs!

a b c d e

Page 30: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

hotdog friesburger

> rpush order burger1> rpush order hotdog2> rpush order fries3

order

Page 31: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

hotdog friesburger

> lrange order 0 11. burger2. hotdog

> lindex order 2fries

order

Page 32: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

hotdog friesburger

> lrange order 0 -11. burger2. hotdog3. fries

order

Page 33: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> lpop orderburger

hotdog friesburger

order

Page 34: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

sets

•unique elements

•intersect, union, difference

Page 35: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> sadd meat bacon1> sadd meat turkey1> sadd toppings bacon1> sadd toppings bacon0

Page 36: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

RPUSHmeat

thanks to peter cooper (@peterc) for the graphs!

burger turkey ham capicola jerky bacon

toppings relish bacon ketchupmustard pickles

Page 37: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

meatburger turkey ham capicola jerky

toppings

relish ketchupmustard pickles

> sinter meat toppings1. bacon

bacon

Page 38: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

sorted sets

•high score list

•set algebra

•ranges by score or rank

Page 39: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> zadd menu 4.99 burger1> zadd menu 2.99 shake1> zadd menu 1.99 fries1

Page 40: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

menu

burger

fries

shake

key score

1.99

2.99

4.99

Page 41: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

menu

burger

fries

shake

key score

1.99

2.99

4.99

> zrange menu 0 -1

1. fries2. shake3. burger

Page 42: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

menu

burger

fries

shake

key score

1.99

2.99

4.99

> zrank menu fries0

> zscore menu fries1.99

Page 43: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

menu

burger

fries

shake

key score

1.99

2.99

4.99

> zrangebyscore menu 2 5

1. shake2. burger

Page 44: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

menu

burger

fries

shake

key score

1.99

2.99

4.99

> zremrangebyscore menu 1.50 4.502

deleted!

Page 45: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

hashes

•easier to get all keys, values

•space saver

Page 46: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

orders:1

thanks to peter cooper (@peterc) for the graphs!

nick burgerjohn friesmike shakejoe saladcreated_at 1298686121

> hset orders:1 nick burger1> hset orders:1 john fries1

Page 47: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

orders:1nick burgerjohn friesmike shakejoe saladcreated_at 1298686121

> hget orders:1 mikeshake> hlen orders:15> hexists orders:1 brian0

Page 48: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

orders:1nick burgerjohn friesmike shakejoe saladcreated_at 1298686121

> hvals orders1. burger2. fries3. shake4. salad5. 1298686121

Page 49: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

getting started

Page 50: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

communityBSD, on GitHub

Awesome maintainer (antirez)

IRC, wiki, mailing list

Hosting providers: Redis TO GO, OpenRedis

Page 51: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

git clone git://github.com/antirez/redis

make

redis-server

or... $YOUR_DISTRO’s package manager

installing

Page 52: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

simple telnet interface

no authorization/authentication by default

AUTH password

use appendonly & daily cron BGREWRITEAOF

sysadmin

Page 53: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

depends on system and configuration

ranges from 5,000 to 120,000 ops/sec

commands have O(n) complexity listed

performance

Page 54: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

misc

master/slave replication

diskstore soon

cluster support someday?

Page 55: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

use cases

Page 56: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

when?

Whenever you want to store data fast that doesn't need to be 100% consistent.

-Mathias Meyerhttp://www.paperplanes.de/2009/10/29/when_to_redis.html

Page 57: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

hit counter

ideal with speed and INCR/INCRBY

total counts = counters

daily per URL = sorted set (ZINCRBY)

Page 58: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

on a URL hit...

HTTP: GET /index.html

Redis:INCR index.htmlZINCRBY hits 1 index.html

Page 59: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

> get index.html3910> get pages/docs.html2983> get public/404.html199

basic stats

Page 60: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

advanced

> zrange hits 0 -1 withscores1) "public/404.html"2) "199"3) "pages/docs.html"4) "2983"5) "index.html"6) "3910"

Page 61: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

queueatomic pops = multiple workers

start a job: RPUSH key '{"some":"data"}'

worker daemon(s): BLPOP key

Page 62: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries

Thanks!

http://redis.io