MySQL与Redis在现今的Web应用中非常的常用,很多时候,当数据发生更改的时候,常常需要同步到这两种数据库中,以确保数据的一致性。但是,怎样才能实现MySQL与Redis间的一致性呢?
要实现MySQL与Redis之间的一致性,首先说明一点,MySQL应该作为主 App,Redis作为辅应用,主要用来存储MySQL中的热点数据,以便加快数据的访问速度,减少数据库的负担和压力。一般我们会使用两个MySQL触发器,一个在MySQL服务器上,一个在远程的Redis服务器上。
那么怎样才能让这两个触发器产生一致的结果呢?当MySQL中的热点数据发生变更时,可以通过MySQL触发器实现前端的实时更新和后台的同步,如下所示:
“`mysql
CREATE TRIGGER HotDataChanged AFTER UPDATE ON hotdata
FOR EACH ROW BEGIN
SET @RedisData = CONCAT (‘{key:”‘, NEW.Key, ‘”, value:”‘, NEW.Value, ‘”}’);
SELECT Redis_Set (@RedisData);
END;
这段代码会在MySQL中的hotdata表发生变更时自动运行,它会把MySQL中更新的热点数据转换成一个json字符串,并将其发送到redis服务器,代码如下:
public static void redisSet(String Redis_Set){
Jedis jedis = new Jedis(“127.0.0.1”,6379);
//把MySQL中更新的热点数据转换成一个json字符串
String json = Redis_Set;
//把json字符串发送到redis服务器
jedis.set(“hotdata”,json);
jedis.close();
}
当Redis接受到json字符串之后,这时就可以在Redis服务器上运行一个脚本,来把MySQL中的相应热点数据同步到Redis中,同样也可以通过另一个触发器来实现Redis与MySQL之间的同步,如下所示:
CREATE TRIGGER RedisDataChanged AFTER UPDATE ON RedisData
FOR EACH ROW BEGIN
SET @MySqlDate = CONCAT (‘{key:”‘, NEW.Key, ‘”, value:”‘, NEW.Value, ‘”}’);
SELECT MySql_Set (@MySqlData);
END;
通过以上步骤,MySQL与Redis间的一致性可以得以实现。通过设置触发器,可以实时把MySQL中的热点数据更新到Redis中,并把Redis中的热点数据同步到MySQL中,以达到一致性的目的。