Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over...
Transcript of Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over...
![Page 2: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/2.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/3.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/4.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/5.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/6.jpg)
![Page 7: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/7.jpg)
![Page 8: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/8.jpg)
![Page 9: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/9.jpg)
![Page 10: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/10.jpg)
![Page 11: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/11.jpg)
![Page 12: Redis: Data Cheeseburgers - SCALE · > strlen fries 4 > getrange fries 0 1 ov > append fries over done over fries over fries overdone fries](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/12.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/13.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/14.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/15.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/16.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/17.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/18.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/19.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/20.jpg)
•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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/21.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/22.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/23.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/24.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/25.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/26.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/27.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/28.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/29.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/30.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/31.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/32.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/33.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/34.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/35.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/36.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/37.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/38.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/39.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/40.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/41.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/42.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/43.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/44.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/45.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/46.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/47.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/48.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/49.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/50.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/51.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/52.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/53.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/54.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/55.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/56.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/57.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/58.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/59.jpg)
> 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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/60.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042020/5e772c87cd0aa621c772dddf/html5/thumbnails/61.jpg)
queueatomic pops = multiple workers
start a job: RPUSH key '{"some":"data"}'
worker daemon(s): BLPOP key