![Page 1: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/1.jpg)
Garry Shutler | @gshutler
![Page 2: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/2.jpg)
Garry Shutler | @gshutler
![Page 3: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/3.jpg)
@gshutler
What is it?
@gshutler
![Page 4: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/4.jpg)
@gshutler
What is it good for?
@gshutler
![Page 5: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/5.jpg)
The Redis protocol
Simple to implement
Fast to parse
Human readable
@gshutler
![Page 6: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/6.jpg)
@gshutler
The Redis protocol
COMMAND KEY ARGS...
@gshutler
![Page 7: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/7.jpg)
@gshutler
The Redis protocol
redis.command(key, *args)
@gshutler
![Page 8: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/8.jpg)
@gshutler
The Redis protocol
SET mykey 3
@gshutler
![Page 9: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/9.jpg)
@gshutler
The Redis protocol
redis.set("mykey", 3)
@gshutler
![Page 10: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/10.jpg)
@gshutler
The Redis protocol
SET mykey 3 EX 3600
@gshutler
![Page 11: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/11.jpg)
@gshutler
The Redis protocol
redis.set("mykey", 3, { "ex": 3600 })
@gshutler
![Page 12: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/12.jpg)
@gshutler
Cache
@gshutler
![Page 13: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/13.jpg)
Cachefunction cached(key, fn) { var value = redis.get(key); if (!value) { value = fn(); redis.set(key, value); } return value;}
@gshutler
![Page 14: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/14.jpg)
Cachefunction expensiveThing() { return cached("expensive", function () { // do something that's expensive return expensiveValue; });}
@gshutler
![Page 15: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/15.jpg)
Cache
expensiveThing(); // missexpensiveThing(); // hitexpensiveThing(); // hit
@gshutler
![Page 16: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/16.jpg)
Cachefunction expensiveThing(param) { var key = "expensive:" + param; return cached(key, function () { sleep(param); return param; });}
@gshutler
![Page 17: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/17.jpg)
Cache
expensiveThing(1); // missexpensiveThing(1); // hitexpensiveThing(2); // missexpensiveThing(2); // hitexpensiveThing(1); // hit
@gshutler
![Page 18: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/18.jpg)
Cachefunction cached(key, expiry, fn) { var value = redis.get(key); if (value) { redis.expire(key, expiry); } else { value = fn(); redis.set(key, value, { "ex": expiry }); } return value;}
@gshutler
![Page 19: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/19.jpg)
Cachefunction expensiveThing(param) { var key = "expensive:" + param; return cached(key, 3600, function () { sleep(param); return param; });}
@gshutler
![Page 20: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/20.jpg)
or vs
Relative In 5 minutes
Absolute At 9am
@gshutler
Expiration
![Page 21: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/21.jpg)
@gshutler
Expiration
my_report:last_hour
@gshutler
![Page 22: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/22.jpg)
@gshutler
Expiration
my_report:2015051118
@gshutler
![Page 23: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/23.jpg)
@gshutler
Data types
@gshutler
![Page 24: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/24.jpg)
@gshutler
String
@gshutler
![Page 25: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/25.jpg)
@gshutler
List
@gshutler
![Page 26: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/26.jpg)
@gshutler
Set
@gshutler
![Page 27: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/27.jpg)
@gshutler
Conditional GET
@gshutler
![Page 28: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/28.jpg)
@gshutler
Conditional GETvar etagKey = "etag:" + url;
if (storedEtag = redis.get(etagKey)) { headers["If-None-Match"] = storedEtag;}
var response = http.get(url, headers);var etag = response.headers["ETag"];
redis.set(etagKey, etag, { "ex": 300 });
@gshutler
![Page 29: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/29.jpg)
@gshutler
Touch values
@gshutler
![Page 30: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/30.jpg)
@gshutler
Touch values
SET {KEY} 1 EX {TIME}
EXISTS {KEY}
@gshutler
![Page 31: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/31.jpg)
@gshutler
Ephemeral lookups
@gshutler
![Page 32: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/32.jpg)
@gshutler
Ephemeral lookups
Forgotten password IDs
OAuth access tokens
Voucher codes
@gshutler
![Page 33: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/33.jpg)
@gshutler
Time-series counter
@gshutler
![Page 34: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/34.jpg)
@gshutler
Time-series counter
INCR clicks:201505111830
@gshutler
![Page 35: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/35.jpg)
@gshutler
Time-series counter
INCR clicks:201505111830INCR clicks:2015051118INCR clicks:20150511
@gshutler
![Page 36: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/36.jpg)
@gshutler
Time-series counter
INCR clicks:201505111830EXPIRE clicks:201505111830 86400
INCR clicks:2015051118EXPIRE clicks:2015051118 2419200
INCR clicks:20150511
@gshutler
![Page 37: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/37.jpg)
@gshutler
Time-series counter> MGET clicks:201505111826 clicks:201505111827 clicks:201505111828 clicks:201505111829 clicks:2015051118301)"5"2)(nil)3)"2"4)"10"5)"1"
@gshutler
![Page 38: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/38.jpg)
@gshutler
Unique visitors
@gshutler
![Page 39: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/39.jpg)
@gshutler
Unique visitors
SADD {KEY} {VALUE}
@gshutler
![Page 40: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/40.jpg)
@gshutler
Unique visitors
SADD visitors:2015051118 1SADD visitors:2015051118 2SADD visitors:2015051118 2
@gshutler
![Page 41: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/41.jpg)
@gshutler
Unique visitors
SCARD {KEY}
@gshutler
![Page 42: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/42.jpg)
@gshutler
Unique visitors
SCARD visitors:2015051118
@gshutler
![Page 43: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/43.jpg)
@gshutler
Queuing
@gshutler
![Page 44: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/44.jpg)
@gshutler
Queuing
RPUSH {KEY} {VALUE}
@gshutler
![Page 45: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/45.jpg)
@gshutler
Queuing
RPUSH queue 1RPUSH queue 2
@gshutler
![Page 46: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/46.jpg)
@gshutler
Queuing
["1", "2"]
@gshutler
![Page 47: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/47.jpg)
@gshutler
Queuing
LPOP {KEY}
@gshutler
![Page 48: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/48.jpg)
@gshutler
Queuing
LPOP queue
@gshutler
![Page 49: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/49.jpg)
@gshutler
Queuing
"1"
@gshutler
![Page 50: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/50.jpg)
@gshutler
Queuing
["2"]
@gshutler
![Page 51: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/51.jpg)
@gshutler
Queuing
LPUSH queue 3
@gshutler
![Page 52: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/52.jpg)
@gshutler
Queuing
["3", "2"]
@gshutler
![Page 53: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/53.jpg)
@gshutler
Queuing
@gshutler
RPUSH queue 4 RPUSH queue 5
queue
LPOP queue LPOP queue LPOP queue
![Page 54: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/54.jpg)
@gshutler
Queuing
BLPOP {KEY}... {TIMEOUT}
@gshutler
![Page 55: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/55.jpg)
@gshutler
Queuing
Encoded values
Reply queues
@gshutler
![Page 56: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/56.jpg)
@gshutler
Have a go
@gshutler
![Page 57: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/57.jpg)
@gshutler
Have a go
Cached Fibonacci
Distributed processing
@gshutler
![Page 58: Redis is the answer, what's the question - Tech Nottingham](https://reader038.vdocuments.us/reader038/viewer/2022110318/55d6eaa5bb61ebff788b46a4/html5/thumbnails/58.jpg)
Garry Shutler | @gshutler