redis blog
IBM 看到的blog如何 存储在redis种
var ArticleHelper = function () {
this.ArticleIDSet = "AIDSet"; // 存放文章 ID 的集合 this.ArticleIDPrefix = "Article"; // 文章 KEY 前缀
this.CommentIDPrefix = "Comment"; // 评论 KEY 前缀
};
ArticleHelper.prototype.getArticleIDs = function(){
var that = this;
var promise = ArticleMySQLHelper.getIDs().then(function (artis) {
if(artis.length == ) {
return null;
}
var _ = [];
artis.forEach(
function(arti) {
_.push(redis.zaddAsync(that.ArticleIDSet, [, arti.ID]));
}
);
return Q.all(_);
});
return promise;
};
//取数据
ArticleHelper.prototype.getArticle = function(id){
var that = this;
var promise = redis.hgetallAsync(that.ArticleIDPrefix+id).then(function(res) {
if (res == null) {
return ArticleMySQLHelper.getOne(id).then(function(article) {
return redis.hmsetAsync(that.ArticleIDPrefix+id, article). then(function(res) {
return Q.resolve(article);
});
});
} else {
return Q.resolve(res);
}
});
return promise;
}
//获取评论
ArticleHelper.prototype.getComment = function(id) {
var that = this;
var promise = redis.zrangeAsync(that.CommentIDPrefix+id, [, -]).then(function(res) {
if (res == null) {
var p = ArticleMySQLHelper.getComments(id).then(function(cmmts) {
var _ = []; cmmts.forEach(function(cmmt) {
_.push(redis.zaddAsync(that.CommentIDPrefix+id,[cmmt.index, cmmt.body])); });
return Q.all(_);
});
return p;
} else {
return Q.resolve(res);
}
})
return promise;
}
//添加评论
ArticleHelper.prototype.addComment = function(id, comment) {
var that = this;
var promise = ArticleMySQLHelper.saveComment(id, comment).then(function(res){
return redis.expireAsync(that.ArticleIDPrefix+id, []); });
return promise;
};
//评论过期
ArticleHelper.prototype.getArticleExpire = function(id) {
var that = this;
var promise = redis.hgetallAsync(that.ArticleIDPrefix+id).then(function(res) {
if (res == null) {
return ArticleMySQLHelper.getOne(id).then(function(article) {
return redis.hmsetAsync(that.ArticleIDPrefix+id, article).then(function(res) {
return redis.expireAsync(that.ArticleIDPrefix+id, *);
}).then(function(){ return Q.resolve(article);
});
});
} else {
return Q.resolve(res);
}
});
return promise;
}
####这是用到的redis 命令
zadd
zrange
hgetall
hget
hmset
hmget
expire
https://www.ibm.com/developerworks/cn/opensource/os-cn-nodejs-redis/index.html
https://redis.io/commands/hmset
redis blog的更多相关文章
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1
代码已上传Github+Gitee,文末有地址 书说上文<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之十 || AOP面向切面编程浅 ...
- Redis系列(八):发布与订阅
Redis的发布与订阅,有点类似于消息队列,发送者往频道发送消息,频道的订阅者接收消息. 1. 发布与订阅示例 首先,在本机开启第1个Redis客户端,执行如下命令订阅blog.redis频道: SU ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十四║ Vuex + JWT 实现授权验证登录
壹周回顾 哈喽,又是元气满满的一个周一,又与大家见面了,周末就是团圆节了,正好咱们的前后端也要团圆了,为什么这么说呢,因为以后的开发可能就需要前后端一起了,两边也终于会师了,还有几天Vue系列就基本告 ...
- Redis C客户端API - God's blog - 博客频道 - CSDN.NET
Redis C客户端API - God's blog - 博客频道 - CSDN.NET Redis安装步骤: 1.redis server安装 wget http://redis.googlecod ...
- nginx+tomcat实现集群,redis实现session共享,软连接实现文件共享:http://blog.csdn.net/hua1586981/article/details/78132710
转载 2017年02月08日 16:52:41 730 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能 ...
- Redis 利用锁机制来防止缓存过期产生的惊群现象-转载自 http://my.oschina.net/u/1156660/blog/360552
首先,所谓的缓存过期引起的“惊群”现象是指,在大并发情况下,我们通常会用缓存来给数据库分压,但是会有这么一种情况发生,那就是在一定时间 内生成大量的缓存,然后当缓存到期之后又有大量的缓存失效,导致后端 ...
- Redis中为什么使用跳表---------转自http://blog.csdn.net/u010412301/article/details/64923131
最近在研究数据库的一些底层实现,百度的面试官问到了跳表,当时没有回答上来,在csdn上看到了这篇文章,感觉写的比较好,希望大家可以多多交流. Redis里面使用skiplist是为了实现sorted ...
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
随机推荐
- Postman系列之发送请求(一)
实验简介 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.它能提供功能强大的 Web API 和 HTTP 请求的调试,它能够发送任何类型的HTTP 请求 (GET, ...
- alt + tab 替代品 switcheroo
作为windows10 alt+tab的增强品: 分享下: 原版: https://github.com/elig0n/Switcheroo 单击版本 https://github.com/elig0 ...
- python programming作业11 Qt designer (打地鼠,不是很完美)
不导包的代码 from PyQt5 import QtCore, QtGui, QtWidgets import sys from PyQt5.QtWidgets import QApplicati ...
- GPU编程shader之正余弦波和幂/指数函数
先上一个demo代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- java:LeakFilling (Linux)
1.Nosql 列数据库,没有update,非关系型数据库: 为了解决高并发.高可扩展.高可用.大数据存储问题而产生的数据库解决方案,就是NoSql数据库. NoSQL,泛指非关系型的数据库,NoS ...
- AttributeError: module 'html.parser' has no attribute 'HTMLParseError'
别人说这种错误大多是,因为beautifulsoup的版本兼容问题, 因为beautifulsoup的4.0以下版本和4.0版本与python3.5以上都不兼容, 网上的解决方案大多是:降python ...
- Cannot get a NUMERIC value from a STRING cell? 已解决
最近在写项目中用到了excel的导入,遇到了Cannot get a NUMERIC value from a STRING cell的报错.原因是无法从纯数字的单元格用获取String的方式获取.跟 ...
- 解决pip安装第三方包编码错误:UnicodeDecodeError: 'ascii' codec can't decode byte....
.../python27/Lib/mimetypes.py 在 import之后添加下列内容 if sys.getdefaultencoding() != 'gbk': reload(sys) sys ...
- 关于绕过cookie 同源策略,和同时向前台返回图片和脚本的解决方案
绕过cookie的同源策略 向前端写入脚本时使用domain来绕过同源策略. 比如 domain= baidu.com .次脚本生成的cookie可以在 *.baidu.com中使用 /// < ...
- tyan 3+1+15 远程
直接修改好BIOS,输入IP即可访问,帐号anonymous 这个登录 也就是为空,直接写入密码,登录即可