7.2 Simple Redis Commands
Let's start practicing using the redis key-value store from our node application.
Task 1:
Require the
Task 2:
Create a
Task 3:
On the
var redis = require('redis');
var client = redis.createClient();
client.set('name', 'Answer');
7.3 Get A Key
We have already stored a value in the question key. Use the redis client to issue a
Task 1:
Use the redis client to issue a
Task 2:
Log the value retrieved with
var redis = require('redis');
var client = redis.createClient();
client.get('question', function(err, data){
console.log(data);
});
7.4 Working With Lists 1
As we saw in the video, redis can do more than just simple key-value pairs. We are going to be using redis' LISTS later to add persistence to our live-moderation app, so let's practice using them now.
Task 1:
Using the redis client's
Task 2:
Using the redis client's
var redis = require('redis');
var client = redis.createClient();
var question1 = "Where is the dog?";
var question2 = "Where is the cat?";
client.lpush('questions', question1, function(err, data){
console.log(data);
});
client.lpush('questions', question2, function(err, data){
console.log(data);
});
7.5 Working With Lists 2
Now that we have seeded the
Task 1:
Use the
Task 2:
Now that we have called
var redis = require('redis');
var client = redis.createClient();
client.lrange('questions', 0, -1, function(err, data){
console.log(data);
});
7.6 Persisting Questions
Let's go back to our live-moderation app and add some persistence, first to the questions people ask.
Task:
Use the
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var socket = require('socket.io');
var io = socket.listen(server);
var redis = require('redis');
var redisClient = redis.createClient();
io.sockets.on('connection', function(client) {
client.on('answer', function(question, answer) {
client.broadcast.emit('answer', question, answer);
});
client.on('question', function(question) {
if(!client.question_asked) {
client.question_asked = true;
client.broadcast.emit('question', question);
redisClient.lpush('questions', question);
}
});
});
7.7 Emitting Stored Questions
Now that we have questions stored in redis, let's emit them whenever a new client connects to the server through socket.io.
Task 1:
Use the
Task 2:
Inside of the
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var redis = require('redis');
var redisClient = redis.createClient();
io.sockets.on('connection', function(client) {
redisClient.lrange('questions', 0, -1, function(err, questions){
questions.forEach(function(question){
client.emit("question", question);
});
});
client.on('answer', function(question, answer) {
client.broadcast.emit('answer', question, answer);
});
client.on('question', function(question) {
if(!client.question_asked) {
client.question_asked = true;
client.broadcast.emit('question', question);
redisClient.lpush("questions", question);
}
});
});
7.8 Limiting Questions Stored
Great work! One last thing though, since every time a new question comes in we store it in the questions list, we might run into a problem where there are just too many questions stored in that list.
Task 1:
Add a callback to
Task 2:
Use the
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var redis = require('redis');
var redisClient = redis.createClient();
io.sockets.on('connection', function(client) {
redisClient.lrange("questions", 0, -1, function(err, questions) {
questions.forEach(function(question) {
client.emit("question", question);
});
});
client.on('answer', function(question, answer) {
client.broadcast.emit('answer', question, answer);
});
client.on('question', function(question) {
if(!client.question_asked) {
client.question_asked = true;
client.broadcast.emit('question', question);
redisClient.lpush("questions", question, function(){
redisClient.ltrim('questions', 0, 19);
});
}
});
});