用node加redis实现follow,tag,feed系统
发布于 10 年前 作者 ltebean 5885 次浏览 最后一次编辑是 8 年前

follow,tag,和feed系统都非常适合用redis来实现,以tag系统为例: 用户ltebean要给nodejs加一个标签amazing就是:

sadd user:ltebean:tag:amazing nodejs
sadd user:ltebean:item:nodejs amazing

存一个反向关系是为了即能根据tag查也能根据item查,下面是redis的command:

拿到nodejs所有的标签:

smembers user:ltebean:item:nodejs

拿到tag amazing下所有的item:

smembers user:ltebean:tag:amazing

拿到既打了amazing标签,又打了web标签的item

sunion user:ltebean:tag:amazing user:ltebean:tag:web

下面是nodejs实现的api:

taggie.user('ltebean').item('bootstrap').addTag('css', function(err, res) {});
taggie.user('ltebean').item('bootstrap').addTag('web', function(err, res) {});
taggie.user('ltebean').item('jquery').addTag('web', function(err, res) {});
taggie.user('ltebean').item('jquery').addTag('js', function(err, res) {});
taggie.user('ltebean').item('nodjs').addTag('js', function(err, res) {});

taggie.user('ltebean').item('jquery').allTags(function(err, res) {
    console.log("jquery 's tag: %s", res);
   // jquery 's tag: js,web
});

taggie.user('ltebean').item().allItems(function(err, res) {
     console.log("all items: %s", res);
    // all items: jquery,nodjs,bootstrap
});

taggie.user('ltebean').tag('web').allItems(function(err,res){
    console.log('tagged with web: %s',res);
    // tagged with web: jquery,bootstrap
});

taggie.user('ltebean').tag().allTags(function(err,res){
    console.log('all tags: %s',res);
    // all tags: js,web,css
});

taggie.user('ltebean').tag(['web','js']).itemsByInter(function(err,res){
    console.log('tagged with web and js: %s',res);
    // tagged with web and js: jquery
});

taggie.user('ltebean').tag(['web','js']).itemsByUnion(function(err,res){
    console.log('tagged with web or js: %s',res);
    // tagged with web or js: jquery,nodjs,bootstrap
});

用户follow和feed系统的实现也类似, 最后附上三个项目的地址: taggie: https://github.com/ltebean/taggie user-graph: https://github.com/ltebean/user-graph feedie: https://github.com/ltebean/feedie

回到顶部