Jsフルスタック開発のNoSQLデータベース使用(MongoDBとRedis)
41651 ワード
NoSQLデータベース使用{{NoSQLでーたべーす:しよう}}
続いて前編『Js全桟開発のSequelize用法詳細解(MySQL)』で引き続きkoa 2を学び、前編ではMySQLなどの関係型データベースの使用とORMフレームワークSequelizeの使い方をまとめ、本編ではMongoDBやRedisなどのNoSQL系データベースの使い方をまとめ、普段よく使われているapiや文法をまとめます.
文書ディレクトリ NoSQLデータベース を使用 1. MongoDBは を使用 1.1 mongoseライブラリインストール 1.2データベース接続 1.3宣言保存モデルオブジェクトの作成 1.4クエリー修正削除対象データ 2. mongose公式ドキュメント 3. Redis使用 3.1 Redisライブラリ をインストール 3.2接続Redis 3.3 Redis を使用 3.4同期方式 を用いる. 4. Redisリファレンスブログ 1.MongoDB使用
1.1 mongoseライブラリのインストール
1.2データベース接続
1.3 modelオブジェクトの保存を宣言する
1.4クエリー削除対象データの変更
2.mongose公式ドキュメント英語ドキュメント:https://mongoosejs.com/ 中国語ドキュメント:http://www.mongoosejs.net/
3.Redis使用
3.1 Redisライブラリのインストール
3.2接続Redis
3.3 Redisの使用
3.4同期方式の使用
4.Redis参考博文 node redisの使用https://www.w3cways.com/2364.html Node.js Redisの使用https://blog.csdn.net/q282176713/article/details/80580886
続いて前編『Js全桟開発のSequelize用法詳細解(MySQL)』で引き続きkoa 2を学び、前編ではMySQLなどの関係型データベースの使用とORMフレームワークSequelizeの使い方をまとめ、本編ではMongoDBやRedisなどのNoSQL系データベースの使い方をまとめ、普段よく使われているapiや文法をまとめます.
文書ディレクトリ
1.1 mongoseライブラリのインストール
npm install mongoose -save
1.2データベース接続
//
const mongoose = require('mongoose');
mongoose.connect('mongodb://xxx.xxx.xxx.xxx:27017/admin',{
user:'root',
pass:'xxxxxx',
poolSize: 10,
useNewUrlParser: true,
useUnifiedTopology: true
});
const mongodbConn = mongoose.connection;
mongodbConn.on('error', err => {
console.error(err);
});
mongodbConn.once('open', ()=> {
console.log(' !')
})
1.3 modelオブジェクトの保存を宣言する
const mongodbConn = mongoose.connection;
// model
const cateqorySchema = new mongoose.Schema({
name:{
type:String,
index:true,
unique:true
},
description: String,
createArt:{
type:Date,
default: Date.now
}
});
const Category = mongodbConn.model('Category',cateqorySchema);
// 1
const categoryObj = new Category({
name:' ',
description:' '
});
categoryObj.save(err =>{
if(err){
console.error(err)
return;
}
else{
console.log('save success!');
}
});
// 2
Category.create({
name:' ',
description:' '
},(err, category)=>{
if(err){
console.error(err);
}else{
console.log(category);
}
})
1.4クエリー削除対象データの変更
//
Category.find({
name: ' '
},(err,res)=>{
if(err){
console.log(err)
}else{
console.log(res);
}
mongodbConn.close();
});
//
Category.update({
name: ' '
},{
description:' '
}).then((err,res)=>{
if(err){
console.log(err)
}else{
console.log(res);
}
mongodbConn.close();
});
//
Category.update({
name: ' '
}).then((err,res)=>{
if(err){
console.log(err)
}else{
console.log(res);
}
mongodbConn.close();
});
2.mongose公式ドキュメント
3.Redis使用
3.1 Redisライブラリのインストール
npm install redis -save
3.2接続Redis
const redis = require('redis');
const redisLink = 'redis://xxx.xxx.xxx:6379'
const opts = {
auth_pass: 'xxxxxx',
}
const redisClient = redis.createClient(redisLink, opts)
redisClient
.on('error', err => console.log('------ Redis connection failed ------' + err))
.on('connect', () => console.log('------ Redis connection succeed ------'))
3.3 Redisの使用
//
redisClient.set('name','dahlin',redis.print)
redisClient.get('name', function(err,value){
if(err) throw err;
console.log('name:'+value);
});
//
redisClient.hmset('dahlin',{
'item':'koa2learn',
'chapter':'use redis'
});
redisClient.hgetall('dahlin', function(err,obj){
console.log(obj)
});
redisClient.hkeys("dahlin",function(err,replies){
replies.forEach(function(reply,i){
console.log(i+"->"+reply);
})
});
//
redisClient.lpush('mylist','koa1',redis.print);
redisClient.lpush('mylist','koa2',redis.print);
redisClient.lrange('mylist',0,-1,function(err,items){
if(err){
console.log(err);
}else{
items.forEach(function(item,i){
console.log(i+":"+item);
})
}
});
//
redisClient.sadd('myset','koa1',redis.print);
redisClient.sadd('myset','koa2',redis.print);
redisClient.smembers('myset',function(err,items){
if(err){
console.log(err);
}else{
console.log(items);
}
});
3.4同期方式の使用
// redis util/redis.js
const redis = require("redis");
const { promisify } = require('util');
//Redis http://doc.redisfans.com/index.html
/**
*
* @param {*} db DB, DB 0
*/
function Client(num){
let db = num || 0
let client = redis.createClient({db});
// ,
this.exists = promisify(client.exists).bind(client);
this.keys = promisify(client.keys).bind(client);
this.set = promisify(client.set).bind(client);
this.get = promisify(client.get).bind(client);
this.del = promisify(client.del).bind(client);
this.incr = promisify(client.incr).bind(client);
this.decr = promisify(client.decr).bind(client);
this.lpush = promisify(client.lpush).bind(client);
this.hexists = promisify(client.hexists).bind(client);
this.hgetall = promisify(client.hgetall).bind(client);
this.hset = promisify(client.hset).bind(client);
this.hmset = promisify(client.hmset).bind(client);
this.hget = promisify(client.hget).bind(client);
this.hincrby = promisify(client.hincrby).bind(client);
this.hdel = promisify(client.hdel).bind(client);
this.hvals = promisify(client.hvals).bind(client);
this.hscan = promisify(client.hscan).bind(client);
this.sadd = promisify(client.sadd).bind(client);
this.smembers = promisify(client.smembers).bind(client);
this.scard = promisify(client.scard).bind(client);
this.srem = promisify(client.srem).bind(client);
return this;
}
module.exports = Client
//
const Client = require('../util/redis')
let client = new Client(3); //gateway REDIS DB 0
let old = await client.exists(ip);//
if (!old) {
await client.set(ip, value);
}
4.Redis参考博文