实现多种redis整合,打造更强大的性能(整合多个redis)

  随着技术的不断发展,关系型数据库多种类型的整合能够更加大大提高应用系统的性能,比如Redis整合。Redis是一种被广泛应用的一种开源的、内存量大的、速度快的key-value(KV)类型的数据库,通常被用来作为缓存系统或者消息队列的存储目的。它可以和多种类型的数据库整合起来,例如MongoDB, MySQL, Oracle等,来实现更加强大的性能。

  例如Redis整合MongoDB,其优点在于在访问中使用MongoDB保留主要的历史数据,而使用Redis作为缓存,以此来提高访问加载数据速度,增强整体的性能。例如,在设计了一个“订单”的应用时,需要录入跟踪“客户”的历史订单信息。因此,使用MongoDB来存储,而用Redis作为缓存,以减少对MongoDB的访问,提高客户订单的查看的速度以及整体的系统性能。

//下面代码中,将实现 Redis 整合 MongoDB

const mongoose = require(‘mongoose’);

const redis = require(‘redis’);

const client = redis.createClient();

mongoose.connect(‘mongodb://localhost/order_app’, {

useNewUrlParser: true,

useUnifiedTopology: true

})

const orderSchema = new mongoose.Schema({

customerID: Number,

payType: String,

amount: Number,

date: Date

}, { collection: ‘orders’ })

const orderDB = mongoose.model(‘Order’, orderSchema);

//定义redis操作

function redisOperations(orderid) {

client.hget(‘order’, orderid, (err, res) => {

if (err) {

console.log(‘redis内没有该数据’);

orderDB.findOne({ orderid }, (err, res) => {

if (err) console.log(‘mongoDB内没有查找到相应的数据’)

else {

client.hset(‘order’, orderid, JSON.stringify(res));

console.log(‘将mongoDB数据存入redis’);

}

})

} else {

console.log(‘从redis读取数据’);

}

})

}

  而Redis整合MySQL的优点则在于可以节省无用的IO操作,把经常访问的数据放入到Redis中,使得用户能够更快的获取结果数据,而不需要每次都去MySQL中获取,从而提高整体性能。例如,为减少对MySQL的IO操作,假设有一个“商品”的系统,那么可以使用Redis存储经常查询的商品信息,比如销量等,只有当商品的属性有变动时再更新MySQL,此时,就可以大大减少对MySQL的查询,可以提高整体的系统性能。

//下面代码中,将实现 Redis 整合 MySQL

const mysql = require(‘mysql’);

const redis = require(‘redis’);

const client = redis.createClient();

//获取mysql连接

const pool = mysql.createPool({

user: ‘username’,

password: ‘password’,

database: ‘database_name’,

host: ‘host_name’

});

function getProductInfoFromDB(productid) {

return new Promise((resolve, reject) => {

pool.query(‘SELECT * FROM goods WHERE goodsid = ?’, [productid], (err, rows) =>{

if (err) reject(err);

else resolve(rows);

});

});

}

//定义redis操作

function redisOperations(productid) {

client.hget(‘goods’, productid, (err, res) => {

if (err) {

console.log(‘redis内没有该数据’)

getProductInfoFromDB(productid).then(res => {

client.hset(‘goods’, productid, JSON.stringify(res));

}).catch(err => {

console.log(‘mongoDB内没有查找到相应的数据’)

})

} else {

console.log(‘从redis读取数据’);

}

})

}

  以上就是基于Redis的多种数据库整合的大致思路,不管是MongoDB整合还是MySQL整合,都可以用类似的操作和思路来实现,并且可以得到更加强大的性能。在这种情况下,除了利用Redis进行缓存外,还可以将简单的逻辑放到Redis中,通过脚本实现,从


数据运维技术 » 实现多种redis整合,打造更强大的性能(整合多个redis)