2013-11-24 86 views
1

我有一个mysql数据库,里面有数百万条记录。我想使用Redis来提高性能。我已经阅读了关于Redis和它的一些命令。
但我不明白redis的工作原理。我的意思是,据我所知,我可以使用Redis来缓存MySQL数据。但是Redis将如何知道自上次缓存时间以来的新记录。 (我认为Redis也会从mysql中获取数据以缓存它们 - 所以它是从mysql中选择的)Redis的基本读写概念

foreach在mysql中插入,redis也应该更新,我无法弄清楚选择之间有什么区别从MySQL直接,而Redis也从MySQL选择更新自己。 (我不知道Redis是如何工作的,但我认为它是这样工作的)

有人可以解释Redis缓存的工作原理吗?

+3

你误会了Redis。 Redis和MySQL之间没有关系。如果您的应用程序可以帮助处理Redis的内存限制,那么您的应用程序可以选择在其中存储一些数据,但这是您应用程序的功能,而不是Redis的一项功能。 – 2013-11-24 08:58:16

回答

3

您的应用程序代码将不得不更新Redis以及MySQL。你可以通过调用SET来通过字符串键来存储新数据。然后您使用GET命令获取相同的数据。

您可以将Redis看作是一个缓​​存,但它的真正好处在于它的数据结构允许您实质上修改缓存实时。这些适用于简单的列表/集合。利用Redis的Webscale系统经常使用Redis作为其面向网络的应用程序代码将调用的唯一系统。 MySQL和其他RDMBS仅用于报告数据或历史归档。

2

在你的情况下,它更好地考虑由Mysql数据库支持的Memcached。 http://dev.mysql.com/doc/refman/5.0/en/ha-memcached.html

但请注意,Redis和Memcached只适用于键值检索/存储。

+0

所以memcache也会缓存数据,假设它缓存了一个用户的朋友,并且在它一分钟后,更新会更改该用户的朋友列表。那么memcached如何知道是否有新的数据? memcached将返回它自己的缓存好友列表。它是如何知道的,在MySQL中有一个更新?例如: – Pars

+0

:用于像Facebook这样的网站。它的数据库将每隔一毫秒更新一次!所以memcached应​​该获取每一个毫秒更新!我无法得到它...... – Pars

+0

如果你想使用mysql的缓存,那么你必须承担“最终一致性”和数据到期。您可以自定义缓存机制以每X秒刷新一次数据。其他选项反之亦然,在Redis中读取和写入数据,但启用持久性日志..并每隔X秒与mysql数据库同步。 – user3020494

2

一种选择是所谓的直写式缓存。在这种情况下,应用程序会同时使用相同的写入数据更新Redis和Mysql,因此无论显示的数据来自何处(Redis/Mysql更新Redis),数据总是等同的。