The Beauty of Simplicity: Mastering Database Design with Redis

52
The Beauty of Simplicity Mastering Database Design with

description

To many on the outside, Redis looks like your average key-value store. To those in the know, Redis is a powerful data structure store that’s capable of doing much of what a full-featured database can handle.In this talk, Ryan will give a quick overview of Redis’ API and the datatypes it allows you to store and query. He’ll then take you through the process of designing a complex schema with Redis and demonstrate how using simple data structures can help you in making better decisions for your applications.

Transcript of The Beauty of Simplicity: Mastering Database Design with Redis

Page 1: The Beauty of Simplicity: Mastering Database Design with Redis

The Beauty of Simplicity

Mastering Database Design with

Page 2: The Beauty of Simplicity: Mastering Database Design with Redis
Page 3: The Beauty of Simplicity: Mastering Database Design with Redis
Page 4: The Beauty of Simplicity: Mastering Database Design with Redis

What is this talk about?

Page 5: The Beauty of Simplicity: Mastering Database Design with Redis

ChicagoDBhttp://chicagodb.com

Page 6: The Beauty of Simplicity: Mastering Database Design with Redis

1 2 3

Page 7: The Beauty of Simplicity: Mastering Database Design with Redis

1 2 3Basic Redis API

Page 8: The Beauty of Simplicity: Mastering Database Design with Redis

1 2 3Simple Use Cases

Page 9: The Beauty of Simplicity: Mastering Database Design with Redis

1 2 3Learning from Redis

Page 10: The Beauty of Simplicity: Mastering Database Design with Redis
Page 11: The Beauty of Simplicity: Mastering Database Design with Redis

SET the-answer 42OK

Page 12: The Beauty of Simplicity: Mastering Database Design with Redis

GET the-answer“42”

Page 13: The Beauty of Simplicity: Mastering Database Design with Redis

The End

Page 14: The Beauty of Simplicity: Mastering Database Design with Redis
Page 15: The Beauty of Simplicity: Mastering Database Design with Redis

42 24

Page 16: The Beauty of Simplicity: Mastering Database Design with Redis

http://redis.io

Page 17: The Beauty of Simplicity: Mastering Database Design with Redis

ListsRPUSH primes 2(integer) 1RPUSH primes 3(integer) 2RPUSH primes 5(integer) 3

Page 18: The Beauty of Simplicity: Mastering Database Design with Redis

Lists

LRANGE primes 0 -11) “2”2) “3”3) “5”

Page 19: The Beauty of Simplicity: Mastering Database Design with Redis

SetsSADD words foo(integer) 1SADD words bar(integer) 1SADD words foo(integer) 0

Page 20: The Beauty of Simplicity: Mastering Database Design with Redis

Sets

SMEMBERS words1) “foo”2) “bar”

Page 21: The Beauty of Simplicity: Mastering Database Design with Redis

Sorted SetsZINCRBY words 1 foo“1”ZINCRBY words 1 bar“1”ZINCRBY words 1 foo“2”

Page 22: The Beauty of Simplicity: Mastering Database Design with Redis

Sorted Sets

ZREVRANGE words 0 -1 WITHSCORES1) “foo”2) “2”3) “bar”4) “1”

Page 23: The Beauty of Simplicity: Mastering Database Design with Redis

Hashes

HSET person first_name Ryan(integer) 1HSET person last_name Briones(integer) 1

Page 24: The Beauty of Simplicity: Mastering Database Design with Redis

Hashes

HGETALL person1) “first_name”2) “Ryan”3) “last_name”4) “Briones”

Page 25: The Beauty of Simplicity: Mastering Database Design with Redis

QueuesRPUSH queue foo(integer) 1RPUSH queue bar(integer) 2

LPOP queue“1”

Page 26: The Beauty of Simplicity: Mastering Database Design with Redis

Set IntersectionSADD fb_friends 1234567(integer) 1SADD fb_friends 1234568(integer) 1SADD purchasers 1234567(integer) 1

SINTER fb_friends purchasers1) 1234567

Page 27: The Beauty of Simplicity: Mastering Database Design with Redis

Chat ServerZADD room 1307420357571.96 {:msg => “Hello Mike”}

(integer) 1ZADD room 1307420462678.8{:msg => “Hello Joe”}

(integer) 1ZADD room 1307420496256.58{:msg => “Hello World”}

(integer) 1

Page 28: The Beauty of Simplicity: Mastering Database Design with Redis

Chat Server

ZREVRANGE room 0 301) {...}2) {...}

ZRANGEBYSCORE room1307420357571.96 +inf

1) {...}

Page 29: The Beauty of Simplicity: Mastering Database Design with Redis
Page 30: The Beauty of Simplicity: Mastering Database Design with Redis

Application Data in Redis

Page 31: The Beauty of Simplicity: Mastering Database Design with Redis

Data in RDBMS

id first_name last_name login1 Ryan Briones ryanbriones

... ... ... ...

Page 32: The Beauty of Simplicity: Mastering Database Design with Redis

Data in Redis

INCR users:uids“1”

Page 33: The Beauty of Simplicity: Mastering Database Design with Redis

id first_name last_name login1 Ryan Briones ryanbriones

... ... ... ...

Data in RDBMS

Page 34: The Beauty of Simplicity: Mastering Database Design with Redis

INCR users:uids“1”

SET users:1:first_name RyanOK

SET users:1:last_name BrionesOK

SET users:1:login ryanbrionesOK

Data in Redis

Page 35: The Beauty of Simplicity: Mastering Database Design with Redis

id first_name last_name login1 Ryan Briones ryanbriones

... ... ... ...

Data in RDBMS

Page 36: The Beauty of Simplicity: Mastering Database Design with Redis

KEYS users:1:*1) users:1:first_name2) users:1:last_name3) users:1:login

GET users:1:first_name“Ryan”

GET users:1:last_name“Briones”

GET users:1:login“ryanbriones”

Data in Redis

Page 37: The Beauty of Simplicity: Mastering Database Design with Redis

SELECT * FROM users;

Data in RDBMS

Page 38: The Beauty of Simplicity: Mastering Database Design with Redis

SADD users:all 1(integer) 1

SMEMBERS users:all1) 12) ...

Data in Redis

Page 39: The Beauty of Simplicity: Mastering Database Design with Redis

users:uids 1users:1:first_name Ryanusers:1:last_name Briones

users:1:login ryanbrionesusers:all {1}

Data in Redis

Page 40: The Beauty of Simplicity: Mastering Database Design with Redis

SET users:login:ryanbriones:uid 1OK

GET users:login:ryanbriones:uid“1”

Data in Redis

Page 41: The Beauty of Simplicity: Mastering Database Design with Redis

SELECT * FROM users ORDER BY last_name DESC;

Data in RDBMS

Page 42: The Beauty of Simplicity: Mastering Database Design with Redis

users:uids 1users:1:first_name Ryanusers:1:last_name Briones

users:1:login ryanbrionesusers:all {1}

users:login:ryanbriones:uid 1

Data in Redis

Page 43: The Beauty of Simplicity: Mastering Database Design with Redis

SET users:last_name:Briones:uid 100OK

SADD users_last_names BrionesOK

SET users:last_name:Andrews:uid 200OK

SADD users_last_names AndrewsOK

SORT users_last_names ALPHA DESC BY * GET users:last_name:*:uid

1) 1002) 200

Data in Redis1

2

Page 44: The Beauty of Simplicity: Mastering Database Design with Redis

Data in RedisSORT users_last_names ALPHA DESC BY * GET users:last_name:*:uidSTORE users_uid_by_last_name_desc

(integer) 2

TYPE users_uid_by_last_name_desclist

LRANGE users_uid_by_last_name_desc 0 -11) 2002) 100

Page 45: The Beauty of Simplicity: Mastering Database Design with Redis

EXPIRE users_uid_by_last_name_desc 86400(integer) 1

Data in Redis

Page 46: The Beauty of Simplicity: Mastering Database Design with Redis

Data in RDBMS

id first_name last_name login1 Ryan Briones ryanbriones

... ... ... ...

id title body permalink user_id10 Redis Rocks ... redis-rocks 1

... ... ... ... ...

Page 47: The Beauty of Simplicity: Mastering Database Design with Redis

SET posts:10:title “Redis Rocks”OKSET posts:10:body “Lorem ipsum..”OKSET posts:10:permalink “redis-rocks”OK

SET posts:10:user_id 1OKSET posts:permalink:redis-rocks:id 10OKSADD posts:all 10OK

Data in Redis

Page 48: The Beauty of Simplicity: Mastering Database Design with Redis

SET posts:10:title “Redis Rocks”OKSET posts:10:body “Lorem ipsum..”OKSET posts:10:permalink “redis-rocks”OK

SET posts:10:user_id 1OKSET posts:permalink:redis-rocks:id 10OKSADD posts:all 10OK

LPUSH users:1:posts 10OK

Data in Redis

Page 49: The Beauty of Simplicity: Mastering Database Design with Redis

SET posts:10:title “Redis Rocks”OKSET posts:10:body “Lorem ipsum..”OKSET posts:10:permalink “redis-rocks”OK

SET posts:10:user_id 1OKSET posts:permalink:redis-rocks:id 10OKSADD posts:all 10OK

ZADD users:1:posts 1307463108973.28 10OK

Data in Redis

Page 50: The Beauty of Simplicity: Mastering Database Design with Redis

Data in Redis

SORT user:1:posts DESCGET posts:*:titleGET posts:*:permalink

1) “Redis Rocks”2) redis-rocks

Page 51: The Beauty of Simplicity: Mastering Database Design with Redis

AOF Disk Persistence

Lua Scripting

Pub-Sub

Simple Transactions

Cluster/DR

Replication

Sharding

Page 52: The Beauty of Simplicity: Mastering Database Design with Redis

Ryan Briones

work for//obtiva

@ryanbriones