codeages / cache-sync
缓存同步
v1.0.4
2017-08-31 04:23 UTC
Requires (Dev)
- codeages/plumber: ^0.7 || ^0.8 || ^0.9 || ^1.0
- doctrine/dbal: ^2.5
- phpunit/phpunit: ^4 || ^5 || ^6
README
为了解决单个数据中心的单点问题,通常会在多个数据中心进行部署。主数据中心的 MySQL 通常会通过 MySQL 复制的方式同步到从数据中心,而从数据中心通常也有缓存层。这时缓存层无法感知数据库层数据的更新,导致读取到旧数据。因此,当主数据中心的 MySQL 数据有更新时,需要通知从数据中心清除缓存,这个项目就是为了这个需求而生的。
实现原理
当主数据中心更新数据时,会同时将需要更新的缓存键记录到 MySQL 的表中,然后通过 MySQL 复制同步到从数据中心。从数据中心启动一个后台服务,查询有更新的缓存键记录,清除缓存键或重置缓存键的值。
注意:该方案适用于数据更新不太频繁的场景,如果数据更新频繁,可以采用解析 MySQL Binlog 做同步更新缓存的方案。
使用方法
创建缓存同步记录表
CREATE TABLE `cache_sync` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `op` enum('set','del') NOT NULL COMMENT 'Cache操作', `k` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Cache的Key', `v` text COMMENT '当op为set时,v为set的值', `t` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=663 DEFAULT CHARSET=utf8;