使用redis作为缓存,数据还需要存入数据库中吗

使用redis作为缓存,数据还需要存入数据库中吗,第1张

对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached、File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。

但是往往又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。

所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache。而这种需求目前还没有看到有特别成熟的解决方案或工具,因此采用Gearman+PHP+MySQL UDF的组合异步实现MySQL到Redis的数据复制。

MySQL到Redis数据复制方案

无论MySQL还是Redis,自身都带有数据同步的机制,比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。

那么理论上也可以用同样方式,分析MySQL的binlog文件并将数据插入Redis。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的。

因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQL UDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP Gearman Worker,将数据同步到Redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易 *** 作。

1.首先在命令行控制台中打开mysql教程

或许命令的如下:

mysql -u root -p database_name

然后或许会提示输入对应的密码

2.下面这条命令或许对你有用,当你想更换一个数据库教程的时候

mysql>use database_name

然后使用下面这个命令

mysql>source d:datafilename.sql

当然你需要将文件所在的路径搞清楚,并且正确地使用了他

进入mysql 安装所在的目录的子目录bin. 输入执行导入sql的命令.

例如: 你的mysql 安装在 d:mysql

步骤如下:

开始 ->运行 ->输入CMD

D:

cd mysqlbin

mysql -u root -p123456 test <d:a.sql

其中 root 为你的mysql管理员用户名, 123456 为密码 test为数据库名称 d:a.sql 为备份下来的数据文件所在位置.

如果是Windows的话,从命令提示符下到MYSQL文件目录中的Bin文件夹下,执行命令

mysql -u root -p databasename <db.sql

其中root是你MYSQL的用户名,databasename是你数据库的名称,而db.sql你是的文件.注意你必须把db.sql放到bin文件夹下才可以.当然文件的位置可以换.

如果是LINUX的话,直接输入

mysql databasename <db.sql

这种writer-reader架构,一般思路是在缓存更新阶段由writer来解决一致性问题,当数据库数据变化时,同步更新redis并确保缓存更新成功。

作为完整性判断,可以不检查全部的属性,而对数据使用一个自增的版本号(或时间戳)来判断是否最新。

作为后置的检测,可以优化来降低扫描的代价,如只针对最近一个时间周期内(如10min)数据库中更新过的数据,这个集合应该比较小,去redis中进行检查的代价会比较低。


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

原文地址:https://54852.com/sjk/10712689.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存