redisconf 2016 talk - the redis api: simple, composable, powerful
TRANSCRIPT
![Page 1: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/1.jpg)
Copyright 2016 DynomiteDB
The Redis APISimple, Composable, Powerful
Akbar S. Ahmed@DynomiteDB
![Page 2: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/2.jpg)
Copyright 2016 DynomiteDB
Simple
![Page 3: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/3.jpg)
Copyright 2016 DynomiteDB
RESP (Redis protocol)
GETSETLSET ZUNION
Redis server
Redis API
![Page 4: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/4.jpg)
Copyright 2016 DynomiteDB
RESP
GETSETLSET ZUNION
Pluggable backends Pluggable backendsPluggable backends
Redis API
![Page 5: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/5.jpg)
Copyright 2016 DynomiteDB
Schema
![Page 6: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/6.jpg)
Copyright 2016 DynomiteDB
Schema
SELECT firstnameFROM userwhere id = 7
user:id=7key
![Page 7: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/7.jpg)
Copyright 2016 DynomiteDB
Data types
StringListSetSorted SetHash
![Page 8: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/8.jpg)
Copyright 2016 DynomiteDB
String
h e l l o
greeting:english
Sequence of bytesX
![Page 9: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/9.jpg)
Copyright 2016 DynomiteDB
String
h e l l o
GETSET
SETRANGEGETRANGE
greeting:english
STRLEN
APPEND
![Page 10: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/10.jpg)
Copyright 2016 DynomiteDB
String with Integer value
3 5 7 8 4metrics:dau
INCR DECR
INCRBY DECRBY
![Page 11: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/11.jpg)
Copyright 2016 DynomiteDB
String with Float value
3 . 1 4 1pie
INCRBYFLOAT
![Page 12: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/12.jpg)
Copyright 2016 DynomiteDB
Listweb:signups
Bob Barney Ash
Ordered by insertionX
Duplicates allowedX
Fast head/tail operationsX
![Page 13: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/13.jpg)
Copyright 2016 DynomiteDB
List commands
Bob Barney AshLPUSH
LPOP
RPUSH
RPOP
LRANGELTRIM
![Page 14: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/14.jpg)
Copyright 2016 DynomiteDB
Setemployees
Bob
Jane
DavidUnorderedXUnique membersX
Set operationsX
![Page 15: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/15.jpg)
Copyright 2016 DynomiteDB
SetSADDSREMSPOP
SISMEMBER
Bob
David
JaneSCARD
SuePam
SINTER
SUNION
SDIFF
![Page 16: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/16.jpg)
Copyright 2016 DynomiteDB
Sorted set blog:posts:vote
sRESP 5High
availability24
Caching 350Redis API 467
Ordered by scoreXUnique membersX
Set operationsX
![Page 17: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/17.jpg)
Copyright 2016 DynomiteDB
Sorted set
RESP 5High
availability24
Caching 350Redis API 467
ZADD
ZCARD
ZRANGEZREVRANGE
ZRANGEBYLEX
ZRANGEBYSCORE
ZCOUNTZLEXCOUNT
ZINCRBY
ZRANKZSCORE
ZINTERSTOREZUNIONSTORE
![Page 18: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/18.jpg)
Copyright 2016 DynomiteDB
Hash company:id=7
Key ValueName Apple
Revenue 233BState CACity Cupertino
UnorderedXUnique membersX
![Page 19: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/19.jpg)
Copyright 2016 DynomiteDB
Hash
Key ValueName Apple
Revenue 233BState CACity Cupertino
HGET / HMGET
HSET / HMSET
HKEYSHGETALL
![Page 20: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/20.jpg)
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: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/21.jpg)
Copyright 2016 DynomiteDB
Simple, Composable, Powerful
![Page 22: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/22.jpg)
Copyright 2016 DynomiteDB
Redis APICRM app
Database
Cache
Use case
![Page 23: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/23.jpg)
Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB
![Page 24: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/24.jpg)
Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB
![Page 25: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/25.jpg)
Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB
![Page 26: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/26.jpg)
Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB
![Page 27: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/27.jpg)
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: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/28.jpg)
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: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/29.jpg)
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: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/30.jpg)
Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB
![Page 31: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/31.jpg)
Copyright 2016 DynomiteDB
Generate key// Generate text keyvar keyText = 'company:name=' + slug(company.name);
// Generate hashed keyvar keyHash = murmurhash.v2(keyText);
![Page 32: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/32.jpg)
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: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/33.jpg)
Copyright 2016 DynomiteDB
saveToRecentCompanies()cache.lpush( murmurhash.v2('companies:recent'), company.name, saveToAlphabetical);
db.lpush( murmurhash.v2('companies:recent'), company.name, saveToAlphabetical);
![Page 34: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/34.jpg)
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: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/35.jpg)
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: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/36.jpg)
Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB
![Page 37: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/37.jpg)
Copyright 2016 DynomiteDB
Company detailscache.hgetall(key.getKeyHash(req.params.slug), showCompany);
![Page 38: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/38.jpg)
Copyright 2016 DynomiteDBCopyright 2016 DynomiteDB
![Page 39: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/39.jpg)
Copyright 2016 DynomiteDB
Edit companyUpdating a company reuses 100% of the save company database and cache code.
![Page 40: RedisConf 2016 talk - The Redis API: Simple, Composable, Powerful](https://reader036.vdocuments.mx/reader036/viewer/2022062503/587c04ca1a28ab7c668b74f7/html5/thumbnails/40.jpg)
Copyright 2016 DynomiteDB
Thank you
https://github.com/DynomiteDB/redisconf-2016-nodejshttps://github.com/DynomiteDB/redisconf-2016-go (soon)
https://github.com/DynomiteDB/crm-nodejs (soon)Java coming soon. Follow on Twitter for updates.
@DynomiteDB