隐藏

Redis新手指南:在node中使用redis

发布:2023/11/1 22:24:11作者:管理员 来源:本站 浏览次数:270

在node中使用redis


首先,安装驱动:npm install redisredis


redis支持多种数据类型,经常使用的有键/值对,哈希表,链表,集合等。npm


普通数据

咱们先来看看如何存储和获取键/值对。segmentfault

普通数据


咱们先来看看如何存储和获取键/值对。数组


var redis = require('redis')


var client = redis.createClient(6379, '127.0.0.1')

client.on('error', function (err) {

 console.log('Error ' + err);

});


// 1 键值对

client.set('color', 'red', redis.print);

client.get('color', function(err, value) {

 if (err) throw err;

 console.log('Got: ' + value)

 client.quit();

})

复制代码


哈希表


哈希表有点相似ES6中的Map。bash


client.hmset('kitty', {

 'age': '2-year-old',

 'sex': 'male'

}, redis.print);

client.hget('kitty', 'age', function(err, value) {

 if (err) throw err;

 console.log('kitty is ' + value);

});


client.hkeys('kitty', function(err, keys) {

 if (err) throw err;

 keys.forEach(function(key, i) {

   console.log(key, i);

 });

 client.quit();

});

复制代码


链表


Redis链表相似JS数组,lpush向链表中添加值,lrange获取参数start和end范围内的链表元素, 参数end为-1,代表到链表中最后一个元素。 注意:随着链表长度的增加,数据获取也会逐渐变慢(大O表示法中的O(n))性能


client.lpush('tasks', 'Paint the house red.', redis.print);

client.lpush('tasks', 'Paint the house green.', redis.print);

client.lrange('tasks', 0, -1, function(err, items) {

 if (err) throw err;

 items.forEach(function(item, i) {

   console.log(' ' + item);

 });

 client.quit();

});

复制代码


集合


相似JS中的Set,集合中的元素必须是惟一的,其性能: 大O表示法中的O(1)ui


client.sadd('ip', '192.168.3.7', redis.print);

client.sadd('ip', '192.168.3.7', redis.print);

client.sadd('ip', '192.168.3.9', redis.print);

client.smembers('ip', function(err, members) {

 if (err) throw err;

 console.log(members);

 client.quit();

});

复制代码


信道


Redis超越了数据存储的传统职责,它还提供了信道,信道是数据传递机制,提供了发布/预约功能。spa


var redis = require('redis')

var clientA = redis.createClient(6379, '127.0.0.1')

var clientB = redis.createClient(6379, '127.0.0.1')


clientA.on('message', function(channel, message) {

 console.log('Client A got message from channel %s: %s', channel, message);

});

clientA.on('subscribe', function(channel, count) {

 clientB.publish('main_chat_room', 'Hello world!');

});

clientA.subscribe('main_chat_room');

复制代码