Redis的架构分为:redis单机、redis主从、redis集群、redis-sentinel架构,其中redis-sentinel相对于redis集群实现了高可用等特性,对于需要保证稳定性以及核心功能的redis来说,一般会采用redis-sentinel的架构模式。前面2篇文章分别介绍了redis的单机、redis集群的nodeJS配置,本篇文章简单介绍一下redis-sentinel在NodeJs中的配置
使用redis-sentinel
连接redis,所以需要安装对应的依赖
npm install --save redis-sentinel
创建redis-sentinel.js
配置文件,并加入配置
const sentinel = require('redis-sentinel')
// 哨兵节点的地址与端口集合
const sentinels = [
{ host: '127.0.0.1', port: 6375 },
{ host: '127.0.0.1', port: 6376 },
{ host: '127.0.0.1', port: 6377 },
]
// redis-sentinel中配置的master节点的名字
const masterName = 'sentinel-172.22.12.12-6425';
// node_redis的相关属性设置
const opts = {
// auth_pass: 'password', // 在版本较低的node_redis中使用auth_password作为密码,redis-sentinel及时属于版本较低的node_redis
// password: 'password', // 在版本高的node_redis中的密码属性,如果没有密码则无需设置
db: 0, // 如果设置,客户端将在连接上运行Redis select命令选择指定的db。
};
// 创建redisClient实例
const redisClient = sentinel.createClient(sentinels, masterName, opts);
redisClient.on('ready', function () {
console.log('redis-sentinel client is ready to connected');
});
redisClient.on('connect', function () {
console.log('redis-sentinel is now connected', new Date());
});
redisClient.on('reconnecting', function () {
console.log('redis-sentinel reconnecting', new Date());
});
redisClient.on('error', function (err) {
console.log('redis-sentinel Error ' + err);
});
module.exports = {
redisClient
};
封装redisClient操作Redis的方法
const redisClient = require('./redis-sentinel')
// string: 通过key获取value
getString = (key) => {
return new Promise((resolve, reject) => {
redisClient.get(key, function (err, result) {
if (err) {
reject(err);
}
resolve(result);
});
});
};
// string: set key value
setString = (key, value) => {
return new Promise((resolve, reject) => {
redisClient.set(key, value, function(err, res) {
if(err) {
reject(err)
}
resolve(res)
})
})
};
// string: set key value expire
setStringWithExpire = (key, value, expire) => {
return new Promise((resolve, reject) => {
redisClient.set(key, value, function(err, res) {
if(err) {
reject(err)
}
if(expire > 0) {
redisClient.expire(key, parseInt(expire));
}
resolve(res)
})
})
};
module.exports = {
getString,
setString,
setStringWithExpire
}
对Redis的所有功能性操作都可以单独的封装到
redis-operator.js
文件中,模块化操作,提供了整体的redis操作工具类,便于维护和更新使用RedisClient操作的所有方法,可以参考Redis的命令
redis命令参考:http://doc.redisfans.com/