1.3.18 • Published 7 years ago
autoredis v1.3.18
autoredis
autoredis是一个数据库操作的帮助类,简单的描述就是,它能将mysql的查询结果自动存入redis集群之中,在缓存过期以前都不会再次从mysql中读取
安装方式
npm install autoredis
请按照下面的步骤正确的配置你的参数
- 将config.json中的配置复制到你项目的配置文件中
- 在你项目的启动文件中,按照index.js中第一行的做法,将配置正确的设置好
- 或者你可以直接修改config.json文件中的配置
- 最终global对象中结构如下所示
global.config={
db:{
master:{...},
slave1:{...},
slave2:{...}
},
cache:{...},
mongo:{...}
}
它能做到的事情
- 使用连接池进行操作,普通增删改查不用每次都打开关闭连接
- 封装了事务操作
- 传入特定的一个参数,当前查询结果会自动缓存到redis集群中
注意事项
- 由于mysql本身的机制,连接池每隔8小时将自动断开长连接,虽然我加上了防止出错的设置,但是不保证永远不出错
- 封装的事务操作的代码是从一位国外友人的github上抄来的,时间太长了忘记出处了
- 事务操作的表,必须是inno引擎(这个龟腚自然不是我说了算的)
使用示范
普通查询
var db = require('autoredis').mysql;
//cacheKey针对每一个查询都要设置一个不同的值
//在node.js中,最简单的唯一值就是req.originalUrl
var cacheKey = "testCacheKey";
var sql = 'SELECT * FROM tb_mem_user where mobile=?';
var param = ['18575608334']
db.query(sql, param, cacheKey)
.then(function(data) {
//data包含2个属性:sql, rows
//sql为null表示命中缓存
}, function(err) {
})
事务查询
var db = require('autoredis').mysql;
var ids = [1, 2, 3, 4, 5];
var sql_list = [];
var paras = [];
for (var i = 0; i < ids.length; i++) {
sql_list.push("update tb_ad_info set isdeleted = true where id = ? and isdeleted = false");
paras.push([ids[i]]);
}
db.transaction(sql_list, paras, function(rows, err) {
if (err) {
//失败
} else {
//成功
}
});
使用示范
设置缓存
var cache = require('autoredis').cache;
//简单设置
cache.set('key', 'value')
//设置超时时间(单位:秒)
//超时时间设置0为删除缓存,设置-1为永不过期
cache.set('key', 'value', 300)
//利用回调
cache.set('key', 'value', 300, function(err, result){
//result有值就是正确,为null就是失败
})
获取缓存
var cache = require('autoredis').cache;
cache.get('key')
.then(function(v){
//不用再次判断,进入这里表示一定是拿到缓存了
}, function(err){
//err === "1" 表示不存在
//err === "0" 表示配置文件中,cache节点的enable属性设置成了false,缓存未启动
//err返回了一个错误对象,表示拿缓存的过程中,有某个步骤执行异常
})
使用示范
添加引用
var mongo = require('autoredis').mongo;
获取集合并进行增删改查
mongo.collections('media')
.then(function(list) {
list.insert({type:'manga', title: 'one piece', volumes: 612, read:521})
list.update({title: 'one piece'}, {$inc: {read:4}})
list.update({title: 'one piece'}, {$set: {genre:'sci-fi'}})
list.update({title: 'one piece'}, {$push: {author:{$each: ['griffin,peter', 'griffin,brian']}}})
list.update({title: 'one piece'}, {$push: {author:{$each: ['griffin,meg', 'griffin,louis'], $slice: -2}}})
list.update({title: 'one piece'}, {$addToSet: {author:{$each: ['griffin,peter', 'griffin,brian']}}})
list.update({title: 'one piece'}, {$pop: {author:1}})
list.update({title: 'one piece'}, {$pull: {author:'griffin,peter'}})
list.update({title: 'one piece'}, {$pullAll: {author:['griffin,louis']}})
list.find({title: 'one piece'}).toArray(function(err, r){console.log(r);})
})
.catch(function(err) {
console.error(err)
})
创建索引
mongo.ensureIndex('media', { price: 1 })
.then(function(r) {
console.log(r)
})
原子操作,查找并且更新
mongo.findOneAndUpdate(
'media',
{ title: 'one piece' },
{ genre: 'sci-fi4' },
{
sort: { title: -1 },
returnOriginal: false,
upsert: false,
maxTimeMS: 100
})
.then(function(result) {
console.log('findOneAndUpdate')
console.log(result)
})
.catch(function(err) {
console.error(err)
})
创建表关联(DBRef类型)
mongo.collections("parent")
.then(function(db) {
db.save({
title: 'parent'
}).then(function(r) {
console.log(r.ops._id)
})
})
mongo.collections("child")
.then(function(db) {
//创建关联
db.save({
title: 'child2',
ref: mongo.newDBRef('parent', '56ca863a5e33ae1046cd931c')
}).then(function(r) {
console.log(r.ops)
})
//按关联条件提取数据
db.find({
title: 'child'
}).toArray(function(err, r) {
var l = r[0].ref;
l.fetch().then(function(result) {
console.log(result)
})
})
})
Map-Reduce操作
mongo
.collections("testgroup")
.then(function(db) {
var map = function() {
var value = {
num: this.num,
count: 1
};
emit(this.name, value)
};
var reduce = function(name, val) {
reduceValue = {
num: 0,
count: 0
};
for (var i = 0; i < val.length; i++) {
reduceValue.num += val[i].num;
reduceValue.count += val[i].count;
}
return reduceValue;
};
var finalize = function(key, value) {
value.avg = parseInt(value.num / value.count);
return value;
};
var options = {
query: { num: { $gt: 500 } },
out: { inline: 1 },
verbose: true,
finalize: finalize
};
var callback = function(err, result, timeResult) {
console.log(result)
console.log(timeResult);
}
db.mapReduce(map, reduce, options, callback)
})
1.3.18
7 years ago
1.3.16
7 years ago
1.3.14
7 years ago
1.3.12
7 years ago
1.3.10
7 years ago
1.3.8
7 years ago
1.3.6
8 years ago
1.3.4
8 years ago
1.3.2
8 years ago
1.3.0
8 years ago
1.2.6
9 years ago
1.2.4
9 years ago
1.2.3
10 years ago
1.2.2
10 years ago
1.2.1
10 years ago
1.2.0
10 years ago
1.1.0
10 years ago
1.0.6
10 years ago
1.0.5
10 years ago
1.0.4
10 years ago
1.0.3
10 years ago
1.0.2
10 years ago
1.0.1
10 years ago
1.0.0
10 years ago