如何沟通与redis没有外部模块

How comunicate with redis without exernal modules?

本文关键字:外部 模块 redis 何沟通      更新时间:2023-09-26

我想知道节点redis包装器如何与RESP (redis序列化协议)数据库通信。

一个例子
const redis = function(uri) {
  this.client = '' // how connect with redis uri redis://localhost:6379
}
redis.prototype.set = (key, value, callback) => {
  // how comunicate with redis and set some value?
}

所以RESP是基于TCP连接的纯文本协议。

Node允许你使用内置的net模块和它的Socket类建立TCP连接。

所以对于你的例子(注意:这显然是一个过度简化的版本):

var net = require('net'); // builtin since Node 0.3.4
const redis = function(uri) {
  var host = getHostFromUri(uri), port = getPortFromUri(uri)
  this.client = new net.Socket()
  this.client.connect(port, host, function() { ... })
  this.client.on('data', function(msg) {
    if(this.responseHandler) this.responseHandler(msg)
  })
}
redis.prototype.set = function(key, value, callback) {
  // assuming the connection was successful
  this.client.write("SET " + key + " " + value + "'r'n")
  this.responseHandler = callback
}