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进行反向代理和负载均衡,此 ...
随机推荐
- c#阿里云短信验证码
发送验证码 private static void SendAcs(string mobile, string templateCode, dynamic json, int ourid) { if ...
- 阶段3 3.SpringMVC·_03.SpringMVC常用注解_7 ModelAttribute注解
这个注解可以作用在方法上,也可以作用在参数上 演示 user里面有三个属性, 表单只提交了两个属性.缺少了date属性 date没有获取到值因为也没提交这个值. 下面返回的user对象.上面就会拿到 ...
- shell脚本安装python、pip-----非交互式的--批量执行函数
首先把pip-.tgz 安装包放在 /usr/local 下面,按照顺序先安装pip,再安装python.不要先安装或只安装python,否则很容易出错, cat >>pip-python ...
- jmeter响应数据中文乱码处理
1.在jmeter的bin目录下找到 jmeter.properties 文件并打开 2.搜索关键字 “default.encoding”,将1084行(以搜索到的位置为准)改成下图所示:samp ...
- Python爬虫学习==>第一章:Python3+Pip环境配置
前置操作 软件名:anaconda 版本:Anaconda3-5.0.1-Windows-x86_64清华镜像 下载链接:https://mirrors.tuna.tsinghua.edu.cn/ ...
- github 上传大文件100MB姿势
最新想把写一个一键配置Linux的脚本,所以就要安装一些软件咯,但是把有时候有源码安装比较好,而且有些东西直接传到Github会很方便,可又超过了100MB,Github正常情况下是不允许上传超过10 ...
- C语言之联合体
联合union是一个能在同一个存储空间存储不同类型数据的类型 联合体所占的内存长度等于其最长成员的长度,也有叫做共用体 联合体虽然可以有多个成员,但同一时间只能存放其中一种 对于联合体来讲最基本的原则 ...
- 使用choco 在windows 环境安装kubectl 并配置
首先安装choco #以管理员身份运行cmd命令 @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -N ...
- 搭建elk集群 disabled in libcurl elasticsearch-6.2.2 更新license 版本
0.logstash的部分配置 output { stdout {codec => rubydebug} elasticsearch { hosts => ["172.31.25 ...
- 论文阅读 | Towards a Robust Deep Neural Network in Text Domain A Survey
摘要 这篇文章主要总结文本中的对抗样本,包括器中的攻击方法和防御方法,比较它们的优缺点. 最后给出这个领域的挑战和发展方向. 1 介绍 对抗样本有两个核心:一是扰动足够小:二是可以成功欺骗网络. 所有 ...