the redis api akbar ahmed, dynomitedb

40
Copyright 2016 DynomiteDB The Redis API Simple, Composable, Powerful Akbar S. Ahmed @DynomiteDB

Upload: redis-labs

Post on 16-Jan-2017

260 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

The Redis APISimple, Composable, Powerful

Akbar S. Ahmed@DynomiteDB

Page 2: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Simple

Page 3: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

RESP (Redis protocol)

GETSETLSET ZUNION

Redis server

Redis API

Page 4: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

RESP

GETSETLSET ZUNION

Pluggable backends Pluggable backendsPluggable backends

Redis API

Page 5: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Schema

Page 6: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Schema

SELECT firstnameFROM userwhere id = 7

user:id=7key

Page 7: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Data types

StringListSetSorted SetHash

Page 8: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

String

h e l l o

greeting:english

Sequence of bytesX

Page 9: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

String

h e l l o

GETSET

SETRANGEGETRANGE

greeting:english

STRLEN

APPEND

Page 10: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

String with Integer value

3 5 7 8 4metrics:dau

INCR DECR

INCRBY DECRBY

Page 11: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

String with Float value

3 . 1 4 1pie

INCRBYFLOAT

Page 12: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Listweb:signups

Bob Barney Ash

Ordered by insertionX

Duplicates allowedX

Fast head/tail operationsX

Page 13: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

List commands

Bob Barney AshLPUSH

LPOP

RPUSH

RPOP

LRANGELTRIM

Page 14: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Setemployees

Bob

Jane

DavidUnorderedXUnique membersX

Set operationsX

Page 15: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

SetSADDSREMSPOP

SISMEMBER

Bob

David

JaneSCARD

SuePam

SINTER

SUNION

SDIFF

Page 16: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Sorted set blog:posts:vote

sRESP 5High

availability24

Caching 350Redis API 467

Ordered by scoreXUnique membersX

Set operationsX

Page 17: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Sorted set

RESP 5High

availability24

Caching 350Redis API 467

ZADD

ZCARD

ZRANGEZREVRANGE

ZRANGEBYLEX

ZRANGEBYSCORE

ZCOUNTZLEXCOUNT

ZINCRBY

ZRANKZSCORE

ZINTERSTOREZUNIONSTORE

Page 18: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Hash company:id=7

Key ValueName Apple

Revenue 233BState CACity Cupertino

UnorderedXUnique membersX

Page 19: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Hash

Key ValueName Apple

Revenue 233BState CACity Cupertino

HGET / HMGET

HSET / HMSET

HKEYSHGETALL

Page 20: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Ordered Unique

Best for

String Index No ● Cache (text, JSON, binary)

● CountingList Insertio

nNo ● Fast head/tail operations

● Recent items

Set No Yes ● Existence / membership● Set operations

Sorted set

Score Yes ● Top x items● Set operations

Hash No Yes ● Cache● Database row / document

Page 21: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Simple, Composable, Powerful

Page 22: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Redis APICRM app

Database

Cache

Use case

Page 23: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB

Page 24: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB

Page 25: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB

Page 26: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB

Page 27: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

if (sort === 'az') { // Get the first 10 companies sorted alphabetically cache.zrange(murmurhash.v2('companies:atoz'), 0, 9, handler);} else if (sort === 'revenue') { // Get the reverse range: sorted = high to low revenue cache.zrevrange(murmurhash.v2('companies:rev'), 0, 9, handler);} else if (sort === 'recent') { cache.lrange(murmurhash.v2('companies:recent'), 0, 9, handler);}

View Companies

Page 28: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

handler()if (reply) { async.map(reply, getDetails, displayCompanies);} else { if (sort === 'az') { db.zrange(murmurhash.v2('companies:atoz'), 0, 9, handler); } else if (sort === 'revenue') { db.zrevrange(murmurhash.v2('companies:rev'), 0, 9, handler); } else if (sort === 'recent') { db.lrange(murmurhash.v2('companies:recent'), 0, 9, handler); }}

Page 29: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

getDetails()cache.hgetall(key.getKeyHash(company), function(err, reply) { if (reply) { reply.slug = slug(reply.name.toLowerCase()); reply.qualified = (reply.qualified === 'true'); } else { db.hgetall(key.getKeyHash(company), ...); } cb(null, reply)});

Page 30: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB

Page 31: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Generate key// Generate text keyvar keyText = 'company:name=' + slug(company.name);

// Generate hashed keyvar keyHash = murmurhash.v2(keyText);

Page 32: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Save companycache.hmset(keyHash, 'name', company.name, 'phone', company.phone, 'website', company.website, 'revenue', company.revenue, 'step', company.step, 'qualified', company.qualified.toString(), saveToRecentCompanies);

db.hmset(....)

Page 33: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

saveToRecentCompanies()cache.lpush( murmurhash.v2('companies:recent'), company.name, saveToAlphabetical);

db.lpush( murmurhash.v2('companies:recent'), company.name, saveToAlphabetical);

Page 34: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

saveToAlphabetical()cache.zadd( murmurhash.v2('companies:alphabetical'), 1, company.name, saveToRevenue);

db.zadd( murmurhash.v2('companies:alphabetical'), 1, company.name, saveToRevenue);

Page 35: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

saveToRevenue()cache.zadd( murmurhash.v2('companies:revenue'), company.revenue, company.name, renderNextPage);

db.zadd( murmurhash.v2('companies:revenue'), company.revenue, Company.name, renderNextPage);

Page 36: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB

Page 37: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Company detailscache.hgetall(key.getKeyHash(req.params.slug), showCompany);

Page 38: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB

Page 39: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Edit companyUpdating a company reuses 100% of the save company database and cache code.

Page 40: The Redis API Akbar Ahmed, DynomiteDB

Copyright 2016 DynomiteDB

Thank you

https://github.com/DynomiteDB/redisconf-2016-nodejshttps://github.com/DynomiteDB/redisconf-2016-go

https://github.com/DynomiteDB/crm-nodejsJava coming soon. Follow on Twitter for updates.

@DynomiteDB