Nodis - 基于redis和Nodejs的前缀匹配、模糊搜索
Nodis - 基于redis和Nodejs的前缀匹配、模糊搜索
Nodis
- github - Nodis
- 基于redis和node.js, 支持前缀匹配和模糊匹配搜索, 如用户名搜索、文章标题搜索等.
- 使用了zookeeper和thrift, 客户端可用任何支持thrift的语言实现, 也可很容易地移除这两部分代码.
- 很容易即可更改为通用代码
使用
- 启动redis
- 启动服务端node NodisServer.js(会注册zookeeper服务)
- 根据thrift/nodis.thrift提供的接口实现客户端
- 客户端调用接口测试
其它
- zookeeper的代码可以很容易的移除, 代码在/lib/zk.js
- 核心库只有nodis.js, 不使用thrift只需要更改/NodisServer.js
- 前缀匹配搜索(如User), 提供了app.js(express 3.0)用作参考实现
- 关于node.js如何使用thrift和zookeeper,可参考这里
4 回复
写得还不错呀,竟然没有人评论,决定山寨前缀搜索部分成为java版- -
just do it.
Nodis - 基于Redis和Node.js的前缀匹配、模糊搜索
描述
Nodis
是一个基于 Redis 和 Node.js 的库,用于实现前缀匹配和模糊搜索功能。例如,它可以用于用户名称搜索或文章标题搜索。
GitHub 地址
特点
- 依赖 Redis: 数据存储和检索通过 Redis 进行。
- 支持多种搜索模式: 包括前缀匹配和模糊搜索。
- 使用 Zookeeper 和 Thrift: 通过 Zookeeper 注册服务,并使用 Thrift 进行通信。这些组件可以根据需要轻松移除。
使用方法
- 启动 Redis: 确保 Redis 服务器正在运行。
- 启动服务端: 运行
node NodisServer.js
启动服务端,该脚本还会向 Zookeeper 注册服务。 - 实现客户端: 根据
thrift/nodis.thrift
提供的接口,实现客户端逻辑。 - 测试客户端: 调用客户端接口进行测试。
其他信息
- Zookeeper 移除:
zk.js
文件中的 Zookeeper 代码可以轻松移除。 - 核心库:
nodis.js
是核心库,如果不需要 Thrift 只需修改NodisServer.js
。 - 前缀匹配示例: 在
app.js
(使用 Express 3.0)中提供了前缀匹配搜索的参考实现。 - Node.js 中使用 Thrift 和 Zookeeper: 更多详细信息参见 这里。
示例代码
以下是一个简单的前缀匹配搜索示例:
// app.js
const express = require('express');
const redis = require('redis');
const nodis = require('./nodis');
const client = redis.createClient();
const server = new nodis.Server(client);
server.init().then(() => {
const app = express();
app.get('/search', (req, res) => {
const prefix = req.query.prefix;
server.search(prefix, (err, results) => {
if (err) {
return res.status(500).send(err);
}
res.json(results);
});
});
app.listen(3000, () => {
console.log('App listening on port 3000!');
});
});
解释
- Redis 客户端: 创建 Redis 客户端连接。
- Nodis 服务器: 初始化
Nodis
服务器实例。 - 路由处理: 实现
/search
路由处理程序,接收查询参数prefix
并进行前缀匹配搜索。 - 结果返回: 返回搜索结果给客户端。
以上是 Nodis
的基本介绍及示例代码。希望对你有所帮助!