rtags——node.js+redis实现的标签管理模块
引言
在我们游览网页时,随处可见标签的身影:
- 进入个人微博主页,可以看到自己/他人的标签,微博系统会推送与你有相同标签的人
- 游览博文,大多数博文有标签标记,以说明文章主旨,方便搜索和查阅
- 网上购物,我们经常使用标签进行商品搜索,如点选 “冬装” + “男士” + “外套” 进行衣物过滤
rtags就是一个用于标签管理的node.js模块,其使用redis的set数据结构,存放标签和相关信息。(github地址: https://github.com/bangerlee/rtags.git)
API
rtags提供以下接口:
- 添加物件及其标签 Tag#add(tags, id[, fn])
- 查询物件的标签 Tag#queryID(id, fn)
- 查询两个物件共有的标签 Tag#queryID(id1, id2, fn)
- 查询具有特定标签的物件 Tag#queryTag(tags, fn)
- 删除物件的标签 Tag#delTag(tags, id[, fn])
- 删除物件 Tag#remove(id[, fn])
示例
首先调用 Tag#createTag 生成一个 Tag 实例,传入一个字符串指示物件的类别,比如 ‘blogs’ 指示博文,‘clothes’ 指示衣服:
var tag = rtags.createTag('blogs');
然后添加该类别的物件和对应的标签,Tag#add 接收两个参数,第一个是物件的标签,有多个标签可用逗号隔开;第二个参数是物件的 id,以下代码中以 strs 下标为 id:
var strs = [];
strs.push('travel,photography,food,music,shopping');
strs.push('music,party,food,girl');
strs.push('mac,computer,cpu,memory,disk');
strs.push('linux,kernel,linus,1991');
strs.push('kernel,process,lock,time,linux');
strs.forEach(function(str, i){ tag.add(str, i); });
经过上面调用,redis 数据库中就有了博文标签数据,我们就可以进行相关查询了。查询某物件具有哪些标签,我们可以调用 Tag#queryID,该函数接收物件 id 和一个回调函数作为参数,查询结果作为数组存放在 ids 中:
tag
.queryID(id = '3')
.end(function(err, ids){
if (err) throw err;
console.log('Tags for "%s":', id);
var tags = ids.join(' ');
console.log(' - %s', tags);
});
以上代码用于查询 id 为 ‘3’ 的博文的标签,执行该段代码,输出为:
Tags for "3": - kernel linux linus 1991
要查询两个物件具有哪些相同标签,同样调用 Tag#queryID,这时传入的参数应为两个物件的 id 和一个回调函数:
tag
.queryID(id1 = '3', id2 = '4')
.end(function(err, ids){
if (err) throw err;
console.log('Tags for "%s" and "%s" both have:', id1, id2);
var tags = ids.join(' ');
console.log(' - %s', tags);
});
以上代码用于查询 id 为 ‘3’ 和 ‘4’ 的博文共有的标签,查询结果为:
Tags for "3" and "4" both have: - kernel linux
rtags 还提供根据标签搜索物件的功能,调用 Tag#queryTag,传入标签和一个回调函数,若有多个标签,可用逗号隔开:
tag
.queryTag(tags = 'music,food')
.end(function(err, ids){
if (err) throw err;
console.log('The objects own the "%s" tags:', tags);
var id = ids.join(' ');
console.log(' - %s', id);
process.exit();
});
以上代码查询同时具有 ‘music’ 和 ‘food’ 标签的博文,其输出为:
The objects own the "music,food" tags: - 0 1
安装
rtags通过以下命令安装,该命令会一同安装rtags依赖的redis模块:
$ npm install rtags
亦可以通过以下命令从 github 获取 rtags 源码:
$ git clone git@github.com:bangerlee/rtags.git
拉起 redis-server,安装 should 模块后,我们可以执行 rtags 源码目录下的例子:
$ cd rtags/test $ node index.js
github地址: https://github.com/bangerlee/rtags.git
欢迎 git pull/fork/clone。
Have fun!
rtags——node.js+redis实现的标签管理模块的更多相关文章
- linux+node.js+redis+mongodb+nginx环境的搭建
1.推荐购买阿里云服务器,使用Centos7.0的服务器版本,在创建完全系统并进入之后,第一步是更新服务器的相关组件 yum -y install gcc gcc-c++ openssl-dev ...
- 搭建Node.js Redis开发环境
创建项目 初始化为node项目 $npm init 安装redis 安装@types/node, @types/redis, typescript 初始化TypeScript 配置ts ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...
- node.js从入门到放弃《模块》
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...
- Node js redis
const redis = require('redis');//redis , '172.16.4.2'); //redis操作 client.set("hello", &quo ...
- node.js redis对事务的控制
redis对事务的支持还是比较差的,就是把所有的执行命令方到队列中一个一个执行 multi开启一个事务,exec执行事务集合中的命令 代码: var redisClient; redisClient. ...
- Node.js(五)学生管理CRUD
npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) n ...
- node.js—Buffer类(二进制数据处理模块)
Buffer类概述 一个用于更好的操作二进制数据的类 我们在操作文件或者网络数据的时候,其实操作的就是二进制数据流 Node为我们提供了一个更加方便的去操作这种数据流的类 Buffer,他是一个全局的 ...
- Node.js实战--资源压缩与zlib模块
Blog:<NodeJS模块研究 - zlib> Github:https://github.com/dongyuanxin/blog nodejs 的 zlib 模块提供了资源压缩功能. ...
随机推荐
- 微信小程序注册流程
响应公司号召,跟上时代潮流,接下来我将独自开发微信小程序,接下来我介绍下注册流程,后续会补上小程序开发心得. 注册流程 注册之前,需要使用一个邮箱,该邮箱作为登录小程序的账号,这个邮箱不能被微信开放平 ...
- 灵雀云CTO陈恺应邀出席国泰君安信息产业投资峰会,探讨全球科技产业新格局
2019年7月9-10日,国泰君安信息产业投资峰会在上海陆家嘴举办.作为国内容器PaaS领域的龙头公司,灵雀云受邀出席本次大会,在“数字化转型从云做起”的论坛中,CTO陈恺发表了<云原生助力企业 ...
- Java 7 源码学习系列(二)——Enum
Enum Enum类是java.lang包中一个类,他是Java语言中所有枚举类型的公共基类. 一.定义 public abstract class Enum<E extends Enum< ...
- Bzoj 2064 分裂 题解
2064: 分裂 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 570 Solved: 350[Submit][Status][Discuss] De ...
- Image Classification
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- Mllib数据类型(密集向量和稀疏向量)
1.局部向量 Mllib支持2种局部向量类型:密集向量(dense)和稀疏向量(sparse). 密集向量由double类型的数组支持,而稀疏向量则由两个平行数组支持. example: 向量(5.2 ...
- linux 安装命令 nginx 部署
[TOC] # 安装anocanda wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh安装:bash A ...
- JDBC连接-操作数据库
JDBC连接数据库的操作步骤 *条件:先启动mysql,然后创建新连接.这里我用Navicat工具来操作数据库. 前面是创建数据库,以及授权的问题.然后打开eclipse 这里我整理一下 抛出的两个异 ...
- python菜鸟基础知识(二)
3.2 字符串格式化 a = "------------- 我爱涛 -------------" b = "name:" c = "age:" ...
- sizeof()和lstrlen()和strlen()区别
strlen()是返回字符串的字节长度, lstrlen()是返回字符串的字符长度. 也就是说第二个函数可能和第一个函数结果一样,如果字符串中字符单位都是单字节的话. 一般来说主要 ...