一、脚本同步:
1、自己写脚本将数据库数据写入到redis/memcached。 (推荐学习:redis视频教程)
2、这就涉及到实时数据变更的问题(mysql row binlog的实时分析),binlog增量订阅alibaba 的canal ,以及缓存层数据丢失/失效后的数据同步恢复问题。
二、业务层实现:
1、先读取nosql缓存层,没有数据再读取mysql层,并写入数据到nosql。
2、nosql层做好多节点分布式(一致性hash),以及节点失效后替代方案(多层hash寻找相邻替代节点),和数据震荡恢复了。
redis实现数据库缓存的分析:
对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(memocached、file system等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而redis这样基于内存的nosql数据库,就非常适合担任实时数据的容器。
但是往往又有数据可靠性的需求,采用mysql作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。所以就会很自然的想到是否可以采用mysql作为数据存储引擎,redis则作为cache。
mysql到redis数据复制方案,无论mysql还是redis,自身都带有数据同步的机制,比较常用的mysql的master/slave模式,就是由slave端分析master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。
那么理论上也可用同样方式,分析mysql的binlog文件并将数据插入redis。
因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的mysql udf,将mysql数据首先放入gearman中,然后通过一个自己编写的php gearman worker,将数据同步到redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作。
以上就是redis怎么实现缓存的详细内容。
