redis怎么实现数据库的缓存

redis怎么实现数据库的缓存,第1张

大致为两种措施:

一、脚本同步:

1、自己写脚本将数据库数据写入到redis/memcached。

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的方式增加了不少流程,但是实现成本更低,更容易 *** 作。

用静态属性,例如:

private static DataTable _dt

public static DataTable dt

{

get

{

if (_dt==null)

{

_dt=new DataTable()

}

return _dt

}

set { _dt = value}

}

如果单是为减小数据库压力建议采用页片断缓存,即缓存页面中部分内容(与数据相关的)。

可以采用Cache类、Session对象和Application对象(后两者很常见,就不多说了)。

而Cache类是提供数据缓存的类,三者类似。

例如要经常读取数据库中一个的内容(销售记录等等)可将其存放一个dataset

首先从数据库读取并填充到一个名为DS的Dateset里(....这个不是楼主的问题就不讨论了)

直接Cache("ds")=DS,则实现了将DataSet“存”到Cache("ds")里。

调用则是

首先定义一个新的Dateset 如 DS1

DS1=Cache("ds")即可


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9442720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存