资讯专栏INFORMATION COLUMN

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

pcChao / 3054人阅读

摘要:简介是一个高性能的数据库,把数据存在内存中,并在磁盘中记录数据的变化。因为将数据存在内存中,所以数据操作非常快。在中使用首先,安装驱动支持多种数据类型,常用的有键值对,哈希表,链表,集合等。键值对运行,结果如下哈希表哈希表有点类似中的。

Redis简介

Redis是一个高性能的key-value数据库,Redis把数据存在内存中,并在磁盘中记录数据的变化。因为将数据存在内存中,所以数据操作非常快。

安装

以windows环境为例,先下载windows版本的redis,地址如下:3.2.100
下载完成后,解压,我这里解压到D:redis目录下

开启服务

打开一个 cmd 窗口,进入目录到 D:redis,运行 redis-server.exe redis.windows.conf。

出现上面界面,则redis已经在本机端口6379启动了服务,那么接下来,便可以用客户端连接到redis服务端了。

在node中使用redis

首先,安装驱动:npm install redis

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

普通数据

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

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。

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)

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超越了数据存储的传统职责,它还提供了信道,信道是数据传递机制,提供了发布/预定功能。

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");

上面代码中,clientA订阅了main_chat_room,这时clientA捕获到订阅事件,执行回调函数,clientB向main_chat_room发送了一条信息Hello world!
clientA接受到信息后,在控制台打印出了相关信息。
运行,结果如下:

小结

本篇只是对Redis进行了最基本介绍,想要获得更多信息,可以参考:
redis documentation
node_redis
Redis实战
Redis开发与运维

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96574.html

相关文章

  • 代码级操作指南 | 如何Docker Swarm运行服务

    摘要:节点管理器将利用该声明该集群服务。在本示例当中,我们将部署一项服务。此标记用于告知公布端口作为该服务的可用端口。将此称为入口负载均衡。当外部系统调用某项服务时,接收节点会接受流量并利用提供的内部服务对其进行负载均衡。 最新版本Docker Engine v1.12中,包含了多项与Docker Swarm紧密相关的功能变更。在今天的文章中,数人云将和大家探讨如何利用Docker的Swar...

    Winer 评论0 收藏0
  • AI开发书籍分享

    摘要:编程书籍的整理和收集最近一直在学习深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后也找了很多的书和文章,随着不断的学习,也整理了下自己的学习笔记准备分享出来给大家后续的文章和总结会继续分享,先分享一部分的 编程书籍的整理和收集 最近一直在学习deep learning深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后...

    huayeluoliuhen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<