redis: need for speed
TRANSCRIPT
![Page 1: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/1.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 1
About Our Company
REDIS: NEED FOR SPEEDElena Kolevska
![Page 2: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/2.jpg)
2
![Page 3: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/3.jpg)
Hello World!
A free spirit, traveller, capoeirista, mum, music lover, wannabe entrepreneur,
proud geek.
Elena Kolevska Software engineer
We're going to talk about Redis:
Things you didn't know
How much faster does it get?
2
![Page 4: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/4.jpg)
![Page 5: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/5.jpg)
HOW MUCH FASTER DOES IT GET?
![Page 6: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/6.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 4
How much faster does it get?
OUR SCENARIO: TWITTER ANALYZER DASHBOARD
751TOTAL TWEETS
751Main stream 120sub-stream foo 107sub-stream bar
...Foo
Bar
Baz
0 30 60 90 120
86
107
120
![Page 7: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/7.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 4
How much faster does it get?
OUR SCENARIO: TWITTER ANALYZER DASHBOARD
751TOTAL TWEETS
751Main stream 120sub-stream foo 107sub-stream bar
...Foo
Bar
Baz
0 30 60 90 120
86
107
120
Total tweets
![Page 8: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/8.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 4
How much faster does it get?
OUR SCENARIO: TWITTER ANALYZER DASHBOARD
751TOTAL TWEETS
751Main stream 120sub-stream foo 107sub-stream bar
...Foo
Bar
Baz
0 30 60 90 120
86
107
120
Total tweets Main Stream
![Page 9: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/9.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 4
How much faster does it get?
OUR SCENARIO: TWITTER ANALYZER DASHBOARD
751TOTAL TWEETS
751Main stream 120sub-stream foo 107sub-stream bar
...
Substream:keyword 1
Foo
Bar
Baz
0 30 60 90 120
86
107
120
Total tweets Main Stream
![Page 10: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/10.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 4
How much faster does it get?
OUR SCENARIO: TWITTER ANALYZER DASHBOARD
751TOTAL TWEETS
751Main stream 120sub-stream foo 107sub-stream bar
...
Substream:keyword 1 Substream:keyword 2
Foo
Bar
Baz
0 30 60 90 120
86
107
120
Total tweets Main Stream
![Page 11: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/11.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 4
How much faster does it get?
OUR SCENARIO: TWITTER ANALYZER DASHBOARD
751TOTAL TWEETS
751Main stream 120sub-stream foo 107sub-stream bar
...
Substream:keyword 1 Substream:keyword 2
Foo
Bar
Baz
0 30 60 90 120
86
107
120
Total tweets
Scores
Main Stream
![Page 12: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/12.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 5
How much faster does it get?
THE PROCESS:
This is a tweet about the
words foo and bar
![Page 13: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/13.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 5
How much faster does it get?
THE PROCESS:
This is a tweet about the
words foo and bar
Send tweet to main stream
Main stream
![Page 14: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/14.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 5
How much faster does it get?
THE PROCESS:
This is a tweet about the
words foo and bar
Send tweet to main stream
Main stream
Increase counter
of total tweets
Total tweets counter
![Page 15: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/15.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 5
How much faster does it get?
THE PROCESS:
This is a tweet about the
words foo and bar
foo
Send tweet to appropriate sub-stream
Stream foo
Stream barbar
Send tweet to main stream
Main stream
Increase counter
of total tweets
Total tweets counter
![Page 16: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/16.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 5
How much faster does it get?
THE PROCESS:
This is a tweet about the
words foo and bar
foo
Send tweet to appropriate sub-stream
Stream foo
Stream barbar
Increase counters for
streams foo/bar
Counter foo
Counter bar
Send tweet to main stream
Main stream
Increase counter
of total tweets
Total tweets counter
![Page 17: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/17.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 6
How much faster does it get?
THE STEPS:
•Save the complete tweet
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for total tweets
•Add tweet to main feed
•Increase counter for found keywords
•Add tweet to sub-feed
![Page 18: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/18.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 7
How much faster does it get?
Redis is TCP server using client/server model. A request to the server is accomplished in two steps:
•The client sends a query to the server, and reads from the socket, usually in a blocking way, for the server response
•The server processes the command and sends the response back to the client
Client Server
![Page 19: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/19.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 7
How much faster does it get?
Redis is TCP server using client/server model. A request to the server is accomplished in two steps:
•The client sends a query to the server, and reads from the socket, usually in a blocking way, for the server response
•The server processes the command and sends the response back to the client
Client Server
Networking link
![Page 20: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/20.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 7
How much faster does it get?
Redis is TCP server using client/server model. A request to the server is accomplished in two steps:
•The client sends a query to the server, and reads from the socket, usually in a blocking way, for the server response
•The server processes the command and sends the response back to the client
Client Server
![Page 21: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/21.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 7
How much faster does it get?
Redis is TCP server using client/server model. A request to the server is accomplished in two steps:
•The client sends a query to the server, and reads from the socket, usually in a blocking way, for the server response
•The server processes the command and sends the response back to the client
Client Server
Request from client to server
![Page 22: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/22.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 7
How much faster does it get?
Redis is TCP server using client/server model. A request to the server is accomplished in two steps:
•The client sends a query to the server, and reads from the socket, usually in a blocking way, for the server response
•The server processes the command and sends the response back to the client
Client Server
Request from client to server
Response from server to client
![Page 23: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/23.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 8
How much faster does it get?
Redis is TCP server using client/server model. A request to the server is accomplished in two steps:
•The client sends a query to the server, and reads from the socket, usually in a blocking way, for the server response
•The server processes the command and sends the response back to the client
Client Server
Request from client to server
Response from server to client
RTT: Round Trip Time
![Page 24: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/24.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 9
How much faster does it get?
THE STEPS:
SET request to the server
•Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
![Page 25: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/25.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 9
How much faster does it get?
THE STEPS:
SET request to the server
1Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
![Page 26: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/26.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 10
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
1
![Page 27: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/27.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 10
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
1
![Page 28: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/28.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 10
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
2
![Page 29: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/29.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 10
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
+ LTRIM
2
![Page 30: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/30.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 10
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
+ LTRIM
3
![Page 31: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/31.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 11
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
3
![Page 32: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/32.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 11
How much faster does it get?
THE STEPS:
INCR
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
3
![Page 33: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/33.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 11
How much faster does it get?
THE STEPS:
INCR
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
4
![Page 34: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/34.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 12
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
4
![Page 35: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/35.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 12
How much faster does it get?
THE STEPS:
SMEMBERS
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
4
![Page 36: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/36.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 12
How much faster does it get?
THE STEPS:
SMEMBERS
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
5
![Page 37: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/37.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 13
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
5
![Page 38: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/38.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 13
How much faster does it get?
THE STEPS:
Logic on client side
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
5
![Page 39: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/39.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 14
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords•Add tweet to sub-feed
•Update score
5
![Page 40: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/40.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 14
How much faster does it get?
THE STEPS:
INCR
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords•Add tweet to sub-feed
•Update score
5
![Page 41: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/41.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 14
How much faster does it get?
THE STEPS:
INCR
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords•Add tweet to sub-feed
•Update score
6
![Page 42: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/42.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 15
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed•Update score
6
![Page 43: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/43.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 15
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed•Update score
6
![Page 44: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/44.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 15
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed•Update score
7
![Page 45: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/45.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 15
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed•Update score
7
+ LTRIM
![Page 46: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/46.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 15
How much faster does it get?
THE STEPS:
LPUSH
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed•Update score
+ LTRIM
8
![Page 47: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/47.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 16
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
8
![Page 48: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/48.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 16
How much faster does it get?
THE STEPS:
ZINCRBY
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
8
![Page 49: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/49.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 16
How much faster does it get?
THE STEPS:
ZINCRBY
Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
9
![Page 50: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/50.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 17
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
9
![Page 51: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/51.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 17
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
9
} + 4 requests for every found keyword
![Page 52: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/52.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 17
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score
13?
} + 4 requests for every found keyword
![Page 53: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/53.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 17
How much faster does it get?
THE STEPS:Number of requests to
server •Save the tweet
•Add tweet to main feed
•Increase counter for total tweets
•Get all monitored keywords
•Check tweet for any keywords
•Increase counter for found keywords
•Add tweet to sub-feed
•Update score } + 4 requests for every found keyword
17?
![Page 54: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/54.jpg)
![Page 55: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/55.jpg)
LEVEL1: PIPELINING
![Page 56: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/56.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 19
How much faster does it get?
Using the PRedis library for PHP</php
$keywords = $client->smembers("keywords");
$responses = $client->pipeline(function ($pipe) use ($keywords) {
$pipe->set(...); // Save the tweet $pipe->lpush(...); // Save the tweet to main feed $pipe->ltrim(...); // Trim the main feed to X tweets so it doesn't grow forever
foreach ($keywords as $keyword) { $pipe->incr(...); // Increase the counter for the keyword $pipe->lpush(...); // Add to the subbed $pipe->ltrim(...); // Trim the stream to X tweets $pipe->zincrby(...); // Update score }
});
![Page 57: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/57.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 19
How much faster does it get?
Using the PRedis library for PHP</php
$keywords = $client->smembers("keywords");
$responses = $client->pipeline(function ($pipe) use ($keywords) {
$pipe->set(...); // Save the tweet $pipe->lpush(...); // Save the tweet to main feed $pipe->ltrim(...); // Trim the main feed to X tweets so it doesn't grow forever
foreach ($keywords as $keyword) { $pipe->incr(...); // Increase the counter for the keyword $pipe->lpush(...); // Add to the subbed $pipe->ltrim(...); // Trim the stream to X tweets $pipe->zincrby(...); // Update score }
});
![Page 58: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/58.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 19
How much faster does it get?
Using the PRedis library for PHP 1Number of requests to
server </php
$keywords = $client->smembers("keywords");
$responses = $client->pipeline(function ($pipe) use ($keywords) {
$pipe->set(...); // Save the tweet $pipe->lpush(...); // Save the tweet to main feed $pipe->ltrim(...); // Trim the main feed to X tweets so it doesn't grow forever
foreach ($keywords as $keyword) { $pipe->incr(...); // Increase the counter for the keyword $pipe->lpush(...); // Add to the subbed $pipe->ltrim(...); // Trim the stream to X tweets $pipe->zincrby(...); // Update score }
});
![Page 59: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/59.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 20
How much faster does it get?
Using the PRedis library for PHP 2Number of requests to
server </php
$keywords = $client->smembers("keywords");
$responses = $client->pipeline(function ($pipe) use ($keywords) {
$pipe->set(...); // Save the tweet $pipe->lpush(...); // Save the tweet to main feed $pipe->ltrim(...); // Trim the main feed to X tweets so it doesn't grow forever
foreach ($keywords as $keyword) { $pipe->incr(...); // Increase the counter for the keyword $pipe->lpush(...); // Add to the subbed $pipe->ltrim(...); // Trim the stream to X tweets $pipe->zincrby(...); // Update score }
});
![Page 60: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/60.jpg)
![Page 61: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/61.jpg)
LEVEL2: LUA SCRIPTING
![Page 62: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/62.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 22
How much faster does it get?
Create a hello.lua file:
return "Hello"
> redis-cli --eval /path/to/script/hello.lua"Hello"
![Page 63: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/63.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 22
How much faster does it get?
Create a hello.lua file:
return "Hello"
> redis-cli --eval /path/to/script/hello.lua"Hello"
![Page 64: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/64.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 23
How much faster does it get?
hello.lua:local tweet = ARGV[1] local key_tweet = KEYS[1] local key_keywords = KEYS[2] local key_total_tweets_count = KEYS[3] local key_scores = KEYS[4] local key_main_feed = KEYS[5]
redis.call("SET", key_tweet, tweet) -- Save the tweet redis.call("INCR", key_total_tweets_count) -- Increase the total tweet count redis.call("LPUSH", key_main_feed, tweet) -- Push the tweet to the main feed redis.call("LTRIM", key_main_feed, 0, 100) -- Trim the main feed
local keywords = redis.call("SMEMBERS", key_keywords) -- Get the keywords
for i, name in ipairs(keywords) do if string.find(tweet, name) then local substream_name = "sub_feed:" .. name redis.call("LPUSH", substream_name, tweet) -- Push the tweet to the sub feed redis.call("LTRIM", substream_name, 0, 100) -- Trim the sub feed redis.call("ZINCRBY", key_scores, 1, name) -- Increment the score for the keyword in the leaderboard end end
return "OK"
![Page 65: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/65.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 24
How much faster does it get?
> redis-cli --eval hello.lua tweet_123 keywords ... , "A tweet about the words foo and bar""OK"
![Page 66: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/66.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 24
How much faster does it get?
> redis-cli --eval hello.lua tweet_123 keywords ... , "A tweet about the words foo and bar""OK"
1!Number of requests to
server
![Page 67: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/67.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 25
How much faster does it get?
SCRIPT
•Evaluates a script cached on the server side by its SHA1 digest. The command is otherwise identical to EVAL.
> redis-cli SCRIPT LOAD "$(cat hello.lua)""6d52847f03028ab1d4620b60dd6ef4a14c8727d7"
> redis-cli evalsha 6d52847f03028ab1d4620b60dd6ef4a14c8727d7 5 \ > tweet_123 keywords ... "A tweet about the words foo and bar""OK"
EVALSHA
•Load a script into the scripts cache, without executing it. Returns a SHA-1 digest of the script.
![Page 68: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/68.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 26
How much faster does it get?
CONS:
•While your script is running, everything else is on hold
•Trickier to maintain
PROS:•Speed
•Atomicity
•Logic moves out of your app layer
•Logic moves out of your app layer
![Page 69: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/69.jpg)
![Page 70: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/70.jpg)
WARP DRIVE: REDIS MODULES
![Page 71: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/71.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 28
How much faster does it get?
What are Redis modules?
•Dynamically loaded libraries
•Written in C
•Almost as fast as the Redis core
•Let you extend Redis commands, create new data structures, access data almost as fast as native Redis commands
•Add-ons to Redis
•Coming in version 4.0, currently in Beta (RC)
![Page 72: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/72.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 29
How much faster does it get?
Layers of the Modules API:
•Low-level: Close to native access to core data structures
•High-level: Client-like access to core and modules' commands
![Page 73: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/73.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 30
How much faster does it get?
0
0.35
0.7
1.05
1.4
Python Lua M:HighLevel M:LowLevel
1.2 1.25
1.05
0.1
Time needed for summing 1 000 000
Sorted Set Scores
Statistics from Itamar Haber @ redislabs
![Page 74: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/74.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 31
How much faster does it get?
![Page 75: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/75.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 32
How much faster does it get?
![Page 76: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/76.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 33
How much faster does it get?
![Page 77: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/77.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 34
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 78: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/78.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 34
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
The context object
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 79: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/79.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 34
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
Command
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 80: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/80.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 34
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
Arguments
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 81: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/81.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 34
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
Format specifier
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 82: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/82.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 35
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 83: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/83.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 35
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
Format specifier
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 84: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/84.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 36
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 85: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/85.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 36
How much faster does it get?
High level API
RedisModule_Call(ctx,"INCR","sc",argv[1],"10");
Format specifier
c -- Null terminated C string pointer.
b -- C buffer, two arguments needed: C string pointer and size_t length.
s -- RedisModuleString as received in argv or by other Redis module APIs returning a RedisModuleString object.
l -- Long long integer.
v -- Array of RedisModuleString objects.
! -- This modifier just tells the function to replicate the command to slaves and AOF. It is ignored from the point of view of arguments parsing.
![Page 86: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/86.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
![Page 87: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/87.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
Definitions of the API
![Page 88: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/88.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
Definitions of the API
![Page 89: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/89.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
Definitions of the APICalled whenever the module is loaded Must be present in each Redis module
![Page 90: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/90.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
Definitions of the API
Register the module or error out
![Page 91: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/91.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
Definitions of the API
Register the command or error out
![Page 92: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/92.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
Definitions of the API
Command name
![Page 93: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/93.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 37
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "tweet_processor", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "tweet.process", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
Definitions of the API
Function name
![Page 94: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/94.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 38
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "process_tweet", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "process_tweet.rand", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
![Page 95: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/95.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 38
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "process_tweet", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "process_tweet.rand", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
The logic of the module
![Page 96: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/96.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 39
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "process_tweet", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "process_tweet.rand", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
// We need EXACTLY 5 arguments if (argc != 5) return RedisModule_WrongArity(ctx);
RedisModule_AutoMemory(ctx);
RedisModuleCallReply *reply; reply = RedisModule_Call(ctx, "INCR", "s", argv[3]); RedisModule_ReplyWithCallReply(ctx, reply);
return REDISMODULE_OK; }
![Page 97: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/97.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 39
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "process_tweet", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "process_tweet.rand", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
// We need EXACTLY 5 arguments if (argc != 5) return RedisModule_WrongArity(ctx);
RedisModule_AutoMemory(ctx);
RedisModuleCallReply *reply; reply = RedisModule_Call(ctx, "INCR", "s", argv[3]); RedisModule_ReplyWithCallReply(ctx, reply);
return REDISMODULE_OK; }
Enable automatic memory management
![Page 98: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/98.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 39
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "process_tweet", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "process_tweet.rand", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
// We need EXACTLY 5 arguments if (argc != 5) return RedisModule_WrongArity(ctx);
RedisModule_AutoMemory(ctx);
RedisModuleCallReply *reply; reply = RedisModule_Call(ctx, "INCR", "s", argv[3]); RedisModule_ReplyWithCallReply(ctx, reply);
return REDISMODULE_OK; }
Call Redis commands
![Page 99: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/99.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 39
How much faster does it get?
Anatomy of a module
#include "redismodule.h" #include <stdlib.h>
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // ... }
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Register the module or error out if (RedisModule_Init(ctx, "process_tweet", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR;
// Register the command or error out if (RedisModule_CreateCommand(ctx, "process_tweet.rand", ProcessTweet_RedisCommand,
"readonly", 1,1,1) == REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK; }
int ProcessTweet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
// We need EXACTLY 5 arguments if (argc != 5) return RedisModule_WrongArity(ctx);
RedisModule_AutoMemory(ctx);
RedisModuleCallReply *reply; reply = RedisModule_Call(ctx, "INCR", "s", argv[3]); RedisModule_ReplyWithCallReply(ctx, reply);
return REDISMODULE_OK; }
Reply with a call object
![Page 100: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/100.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 40
How much faster does it get?
Low level API
RedisModule_AutoMemory(ctx);
RedisModuleKey *key;
key = RedisModule_OpenKey(ctx,argv[1],REDISMODULE_READ|REDISMODULE_WRITE);
if (RedisModule_KeyType(key) == REDISMODULE_KEYTYPE_EMPTY) { RedisModule_StringSet(key,argv[2]); }
RedisModule_CloseKey(key);
![Page 101: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/101.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 40
How much faster does it get?
Low level API
RedisModule_AutoMemory(ctx);
RedisModuleKey *key;
key = RedisModule_OpenKey(ctx,argv[1],REDISMODULE_READ|REDISMODULE_WRITE);
if (RedisModule_KeyType(key) == REDISMODULE_KEYTYPE_EMPTY) { RedisModule_StringSet(key,argv[2]); }
RedisModule_CloseKey(key);
Open a key. Return a key pointer
![Page 102: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/102.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 40
How much faster does it get?
Low level API
RedisModule_AutoMemory(ctx);
RedisModuleKey *key;
key = RedisModule_OpenKey(ctx,argv[1],REDISMODULE_READ|REDISMODULE_WRITE);
if (RedisModule_KeyType(key) == REDISMODULE_KEYTYPE_EMPTY) { RedisModule_StringSet(key,argv[2]); }
RedisModule_CloseKey(key);
Checks the type of the key
![Page 103: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/103.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 40
How much faster does it get?
Low level API
RedisModule_AutoMemory(ctx);
RedisModuleKey *key;
key = RedisModule_OpenKey(ctx,argv[1],REDISMODULE_READ|REDISMODULE_WRITE);
if (RedisModule_KeyType(key) == REDISMODULE_KEYTYPE_EMPTY) { RedisModule_StringSet(key,argv[2]); }
RedisModule_CloseKey(key);
Set a string value for a key
![Page 104: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/104.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 40
How much faster does it get?
Low level API
RedisModule_AutoMemory(ctx);
RedisModuleKey *key;
key = RedisModule_OpenKey(ctx,argv[1],REDISMODULE_READ|REDISMODULE_WRITE);
if (RedisModule_KeyType(key) == REDISMODULE_KEYTYPE_EMPTY) { RedisModule_StringSet(key,argv[2]); }
RedisModule_CloseKey(key);
Close the key
![Page 105: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/105.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 41
How much faster does it get?
Compiling
$ gcc -fPIC -std=gnu99 -c -o process_tweet process_tweet.c $ ld -o process_tweet.so process_tweet.o -shared -Bsymbolic -lc
On Linux:
$ gcc -dynamic -fno-common -std=gnu99 -c -o process_tweet.o process_tweet.c $ ld -o process_tweet.so process_tweet.o -bundle -undefined dynamic_lookup -lc
On OSX:
Loading
./redis-unstable/src/redis-server --loadmodule ./process_tweet.so
![Page 106: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/106.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 42
How much faster does it get?
Calling the command
127.0.01:6379> tweet.process tweet_id:42 "This is my tweet about the words foo and bar" ...
Our command
![Page 107: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/107.jpg)
![Page 108: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/108.jpg)
THINGS YOU DIDN'T KNOW
![Page 109: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/109.jpg)
THINGS YOU probably DIDN'T KNOW
![Page 110: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/110.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 45
Big O Notation: O(1) commands
•ZSCORE
•LPOP, BLPOP, LPUSHX, BRPOPLPUSH
•EXISTS
•GET, GETSET, HGET, GETBIT
•GETRANGE, SETRANGE
•HLEN, HSTRLEN
•LLEN
•PFADD, PFCOUNT
•SISMEMBER
•APPEND
Things you didn't know
![Page 111: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/111.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 45
Big O Notation: O(1) commands
•ZSCORE
•LPOP, BLPOP, LPUSHX, BRPOPLPUSH
•EXISTS
•GET, GETSET, HGET, GETBIT
•GETRANGE, SETRANGE
•HLEN, HSTRLEN
•LLEN
•PFADD, PFCOUNT
•SISMEMBER
•APPEND
Things you didn't know
O(N), but can be considered O(1) for short substrings
![Page 112: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/112.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 45
Big O Notation: O(1) commands
•ZSCORE
•LPOP, BLPOP, LPUSHX, BRPOPLPUSH
•EXISTS
•GET, GETSET, HGET, GETBIT
•GETRANGE, SETRANGE
•HLEN, HSTRLEN
•LLEN
•PFADD, PFCOUNT
•SISMEMBER
•APPEND
Things you didn't know
![Page 113: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/113.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 46
Things you didn't know
Expiration and eviction
Keys are expired in two ways:
•Active
•Passive 1
3 2
Test 20 random keys from the set of keys with an associated expire
10 times per second
Delete all the keys found expiredIf more than 25% of keys were expired, start again from step 1
![Page 114: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/114.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
PublisherSubscriber A Subscriber B
Things you didn't know
![Page 115: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/115.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
PublisherSubscriber A Subscriber B
Things you didn't know
![Page 116: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/116.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1
PublisherSubscriber A Subscriber B
Things you didn't know
![Page 117: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/117.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1
127.0.0.1:6379> subscribe bgwebsummit sofia
PublisherSubscriber A Subscriber B
Things you didn't know
![Page 118: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/118.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
PublisherSubscriber A Subscriber B
Things you didn't know
![Page 119: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/119.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
PublisherSubscriber A Subscriber B
127.0.0.1:6379> pubsub channels
Things you didn't know
![Page 120: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/120.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
PublisherSubscriber A Subscriber B
127.0.0.1:6379> pubsub channels
1) "sofia" 2) "bgwebsummit"
Things you didn't know
![Page 121: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/121.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 127.0.0.1:6379> publish bgwebsummit Hello
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
PublisherSubscriber A Subscriber B
127.0.0.1:6379> pubsub channels
1) "sofia" 2) "bgwebsummit"
Things you didn't know
![Page 122: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/122.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 127.0.0.1:6379> publish bgwebsummit Hello
(integer) 1
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
PublisherSubscriber A Subscriber B
127.0.0.1:6379> pubsub channels
1) "sofia" 2) "bgwebsummit"
Things you didn't know
![Page 123: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/123.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 127.0.0.1:6379> publish bgwebsummit Hello
(integer) 11) "message" 2) "bgwebsummit" 3) "Hello"
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
PublisherSubscriber A Subscriber B
127.0.0.1:6379> pubsub channels
1) "sofia" 2) "bgwebsummit"
Things you didn't know
![Page 124: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/124.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 127.0.0.1:6379> publish bgwebsummit Hello
(integer) 11) "message" 2) "bgwebsummit" 3) "Hello"
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
1) "message" 2) "bgwebsummit" 3) "Hello"
PublisherSubscriber A Subscriber B
127.0.0.1:6379> pubsub channels
1) "sofia" 2) "bgwebsummit"
Things you didn't know
![Page 125: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/125.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 127.0.0.1:6379> publish bgwebsummit Hello
(integer) 11) "message" 2) "bgwebsummit" 3) "Hello"
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
1) "message" 2) "bgwebsummit" 3) "Hello"
PublisherSubscriber A Subscriber B
127.0.0.1:6379> publish sofia Zdraveite
127.0.0.1:6379> pubsub channels
1) "sofia" 2) "bgwebsummit"
Things you didn't know
![Page 126: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/126.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 47
Pub Sub
127.0.0.1:6379> subscribe bgwebsummit
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 127.0.0.1:6379> publish bgwebsummit Hello
(integer) 11) "message" 2) "bgwebsummit" 3) "Hello"
127.0.0.1:6379> subscribe bgwebsummit sofia
Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "bgwebsummit" 3) (integer) 1 1) "subscribe" 2) "sofia" 3) (integer) 2
1) "message" 2) "bgwebsummit" 3) "Hello"
PublisherSubscriber A Subscriber B
127.0.0.1:6379> publish sofia Zdraveite
127.0.0.1:6379> pubsub channels
1) "sofia" 2) "bgwebsummit"
1) "message" 2) "sofia" 3) "Zdraveite"
Things you didn't know
![Page 127: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/127.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 48
Things you didn't know
Pub Sub
•PSUBSCRIBE can be used to subscribe to all channels matching a pattern
•Once a Redis client enters the subscriber mode, it can no longer perform any operation other than subscribe to more channels or unsubscribe from the subscribed ones. An additional connection will be needed in order to publish messages.
•Publishing on db 10, will be heard by a subscriber on db 1
![Page 128: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/128.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 49
Persistence
Persistence options:
•RDB (Point-in-time snapshots)
•AOF (Append only file)
•Combination of AOF and RDB
•No persistence
Things you didn't know
![Page 129: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/129.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 50
Geo API
•Search a GeoSet for members within ‘radius’ distance from given coordinates
•Return the distance in unit (meters by default) between elem1 and elem2 in a GeoSet
Things you didn't know
•Storing and querying named pairs of longitude/latitude coordinates into Redis keys
•Sorted sets with GeoHashing
![Page 130: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/130.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 51
redis-cli
•redis-cli --bigkeys•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 131: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/131.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 51
redis-cli
•redis-cli --bigkeys•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
> redis-cli --bigkeys
•cat /commands.txt| redis-cli
Things you didn't know
![Page 132: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/132.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 51
redis-cli
•redis-cli --bigkeys•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
> redis-cli --bigkeys# Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You can use -i 0.1 to sleep 0.1 sec # per 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far 'foo1' with 10285 bytes [00.00%] Biggest zset found so far 'foo2' with 1 members [00.00%] Biggest string found so far 'foo4' with 100095 bytes [00.00%] Biggest set found so far 'foo5' with 1 members [12.66%] Biggest string found so far 'foo5' with 13505361 bytes [25.32%] Biggest list found so far 'foo6' with 10001 items -------- summary ------- Sampled 79 keys in the keyspace! Total key length in bytes is 3243 (avg len 41.05)
Biggest string found 'foo5' has 13505361 bytes Biggest list found 'foo6' has 10001 items Biggest set found 'foo5' has 12 members Biggest zset found 'foo7' has 8 members
50 strings with 13946784 bytes (63.29% of keys, avg size 278935.68) 3 lists with 10007 items (03.80% of keys, avg size 3335.67) 3 sets with 3 members (03.80% of keys, avg size 1.00) 0 hashs with 0 fields (00.00% of keys, avg size 0.00) 23 zsets with 80 members (29.11% of keys, avg size 3.48)
•cat /commands.txt| redis-cli
Things you didn't know
![Page 133: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/133.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 52
redis-cli
•redis-cli --bigkeys
•redis-cli monitor•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 134: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/134.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 52
redis-cli
•redis-cli --bigkeys
•redis-cli monitor•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
> redis-cli monitor
•cat /commands.txt| redis-cli
Things you didn't know
![Page 135: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/135.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 52
redis-cli
•redis-cli --bigkeys
•redis-cli monitor•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
OK 1491054587.455533 [0 127.0.0.1:35532] "zadd" "foo" "1" "one" 1491054591.768172 [0 127.0.0.1:35532] "zadd" "foo" "2" "two" 1491054605.088297 [0 127.0.0.1:35532] "get" "bar" 1491054609.336546 [0 127.0.0.1:35532] "del" "bar" 1491054618.424296 [0 127.0.0.1:35532] "set" "foobar" "here I am" 1491054669.240038 [0 127.0.0.1:35532] "zcount" "foo" "-inf" "+inf"
> redis-cli monitor
•cat /commands.txt| redis-cli
Things you didn't know
![Page 136: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/136.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 53
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 137: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/137.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 53
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
> redis-cli --scan --pattern '*foo*'
•cat /commands.txt| redis-cli
Things you didn't know
![Page 138: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/138.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 53
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'•redis-cli --stat
•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
key-foo12 key-foo23 foo24 foobarbaz foobarbaz43 foo:bar:12
> redis-cli --scan --pattern '*foo*'
•cat /commands.txt| redis-cli
Things you didn't know
![Page 139: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/139.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 54
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 140: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/140.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 54
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
> redis-cli --stat
•cat /commands.txt| redis-cli
Things you didn't know
![Page 141: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/141.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 54
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat•redis-cli -x set foo < /etc/services
•redis-cli get bar > ~/bar.txt
------- data ------ -------------------------------------- load ----------------------------------- - child - keys mem clients blocked requests connections 506 1015.00K 1 0 24 (+0) 7 506 1015.00K 1 0 25 (+1) 7 506 3.40M 51 0 60461 (+60436) 57 506 3.40M 51 0 146425 (+85964) 107 507 3.40M 51 0 233844 (+87419) 157 507 3.40M 51 0 321715 (+87871) 207 508 3.40M 51 0 408642 (+86927) 257 508 3.40M 51 0 497038 (+88396) 257
> redis-cli --stat
•cat /commands.txt| redis-cli
Things you didn't know
![Page 142: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/142.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 143: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/143.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
> cat /etc/foo.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 144: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/144.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 145: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/145.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 146: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/146.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
•cat /commands.txt| redis-cli
Things you didn't know
![Page 147: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/147.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
> redis-cli 127.0.0.1:6379>
•cat /commands.txt| redis-cli
Things you didn't know
![Page 148: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/148.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
> redis-cli 127.0.0.1:6379> get foo
•cat /commands.txt| redis-cli
Things you didn't know
![Page 149: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/149.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 55
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt•redis-cli get bar > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
> redis-cli 127.0.0.1:6379>"A long long text\nIn multiple lines\n"
get foo
•cat /commands.txt| redis-cli
Things you didn't know
![Page 150: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/150.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 56
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
> redis-cli 127.0.0.1:6379>"A long long text\nIn multiple lines\n"
get foo
•cat /commands.txt| redis-cli
Things you didn't know
![Page 151: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/151.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 56
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
> redis-cli 127.0.0.1:6379>"A long long text\nIn multiple lines\n"
get foo
127.0.0.1:6379> set foo "A long long text"
•cat /commands.txt| redis-cli
Things you didn't know
![Page 152: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/152.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 56
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
> redis-cli 127.0.0.1:6379>"A long long text\nIn multiple lines\n"
get foo
127.0.0.1:6379> set foo "A long long text"
> cat /etc/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 153: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/153.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 56
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
A long long text In multiple lines
> cat /etc/foo.txt
> redis-cli -x set foo < /etc/foo.txtOK
> redis-cli 127.0.0.1:6379>"A long long text\nIn multiple lines\n"
get foo
127.0.0.1:6379> set foo "A long long text"
A long long text
> cat /etc/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 154: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/154.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 57
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 155: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/155.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 57
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
> cat /commands.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 156: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/156.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 57
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
set foo 100 incr foo append foo xxx get foo
> cat /commands.txt
•cat /commands.txt| redis-cli
Things you didn't know
![Page 157: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/157.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 57
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
set foo 100 incr foo append foo xxx get foo
> cat /commands.txt
> cat /commands.txt| redis-cli
•cat /commands.txt| redis-cli
Things you didn't know
![Page 158: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/158.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 57
redis-cli
•redis-cli --bigkeys
•redis-cli monitor
•redis-cli --scan --pattern '*foo*'
•redis-cli --stat
•redis-cli -x set foo < /etc/foo.txt
•redis-cli get foo > ~/bar.txt
set foo 100 incr foo append foo xxx get foo
> cat /commands.txt
OK (integer) 101 (integer) 6 "101xxx"
> cat /commands.txt| redis-cli
•cat /commands.txt| redis-cli
Things you didn't know
![Page 159: Redis: Need for speed](https://reader034.vdocuments.site/reader034/viewer/2022050812/5a64caff7f8b9a88148b530b/html5/thumbnails/159.jpg)
REDIS: Need for speed
@elena_kolevska
Elena Kolevska 58
Tips and best practices
Thank you!@elena_kolevska