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进行反向代理和负载均衡,此 ...
随机推荐
- javascript之DOM总结
DOM简介 全称Document Object Model,即文档对象模型.DOM描绘了一个层次化的树,允许开发人员添加.删除.修改页面的某一部分. 浏览器在解析HTML页面标记的时候,其 ...
- How to run a VBA macro when new mail is received in Outlook
It can be very useful to run a VBA macro when new mail is received in Outlook. A customer asked me t ...
- tensorflow实现线性回归、以及模型保存与加载
内容:包含tensorflow变量作用域.tensorboard收集.模型保存与加载.自定义命令行参数 1.知识点 """ 1.训练过程: 1.准备好特征和目标值 2.建 ...
- ASP.Net Core承载外部程序集
故事背景 一般情况下ASP.Net Core项目配置可以直接在appsetting.json中添加,也可以在项目中添加新的配置文件.但如果想和其他项目一起实现配置文件通用呢?我们可以用绝对定位去访 ...
- TreeSet简单介绍与使用方法
TreeSet简介 TreeSet是JAVA中集合的一种,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合.它继承于AbstractSet抽象类,实现了NavigableSet< ...
- Metinfo5.1 /include/common.php 变量覆盖+SQL注入漏洞
- mysql——插入、更新、删除数据(示例)
插入数据 一.前提,新建表: ), sname ), sage ), ssex ) ); select * from student; 二.多种方式插入数据: ','zhaolei','1990-01 ...
- Emgu 学习笔记(8)之膨胀腐蚀
static void Main(String[] args) { Mat img = CvInvoke.Imread(); Mat d = new Mat(); Mat e = new Mat(); ...
- Ajax异步上传在SSM框架中的应用
最近在做毕业设计,由于毕设中要实现图片上传和视频上传的功能.突然发现原来的Form表单中的file已经满足不了我了,于是在一番折腾之后终于让我找到了一个简便的上传方式.下面来和大家分享一下我的过程. ...
- python list pop()方法
#pop()用于移除列表中的一个元素(默认是最后一个元素,并且返回该元素的值) list1=['Google','Runoob','Taobao'] list_pop=list1.pop() prin ...