越来越多的企业选择采用Redis集群来替代目前多层架构中各层存储,以有效提高系统的可靠性及吞吐量。 然而,在实际系统部署中,接入到Redis集群上的接口如何设计实现Redis集群的可靠性?
要保证Redis集群的可靠性,应该在接口接入到Redis集群上时及时复制数据。这里,推荐采用客户端发布/订阅消息模式,在客户端接口与Redis集群关联上时,将被存储的数据发布到一个特定主题中。 然后,在Redis集群中的每个节点都应监听该主题,并实时获取相关信息,最终实现向Redis集群的复制:
// 客户端发送数据
client.publish("data",JSON.stringify(message));
// redis集群接收,实现复制
client.on('message', function (channel, message) {
var data= JSON.parse(message);
// 将数据写入redis集群
clients.set(data.key,data.value,function(){
console.log("Date is : "+data);
});
});
另一方面,在访问Redis集群时也要求其具备高可用性。 这里,应当在客户端实现冗余访问,比如当客户端首次访问集群时,向Redis集群的多个节点发送访问请求,并接收返回信息,由客户端自行获取结果集中多节点的最优结果。 同时,客户端在每次访问Redis集群时,都可以采用语法糖、变量替换等技术,逐行清洗访问语句,以有效规避注入攻击及业务层面的安全风险:
// 客户端接入
for (var i =0;i
var client = redis.createClient(port, node[i]);
// 客户端查询
client.get(key, function (err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
if (data !== null) {
console.log('data:' + data);
return;
}
});
}
综上所述,Redis集群的可靠性,其主要体现在接口接入时实时复制数据,以及在客户端访问Redis集群时注重冗余及安全的思维。 无论是在编码过程中还是在实际数据访问中,应让安全可靠性成为第一级别,以实现所期待的可靠性 Redis集群。