与Redis存储会话有多安全?

时间:2012-04-23 10:19:19

标签: session redis

我目前正在使用MySql来存储我的会话。它工作得很好,但有点慢。

我被要求使用Redis,但我想知道这是不是一个好主意,因为我听说Redis延迟了写操作。我有点害怕,因为会议需要是实时的。

有没有人遇到过这样的问题?

3 个答案:

答案 0 :(得分:132)

Redis非常适合存储会话。所有操作都在内存中执行,因此读写速度很快。

第二个方面是会话状态的持久性。 Redis为您提供了将会话状态持久保存到硬盘的灵活性。您可以通过http://redis.io/topics/persistence了解详情,但从较高的层面来看,这是您的选择 -

  1. 如果您无法承受丢失任何会话,请在配置文件中设置appendfsync always。有了这个,Redis保证任何写操作都保存到磁盘。缺点是写操作会更慢。
  2. 如果您可以丢失大约1s的数据,请使用appendfsync everysec。通过合理的数据保证,这将带来出色的性能

答案 1 :(得分:14)

基本上有两种主要类型:async snapsnots和fsync()。他们分别被称为RDB和AOF。更多关于persistence modes on the official page

守护进程的信号处理在收到例如SIGTERM时会同步到磁盘,因此重启后数据仍然存在。我认为即使使用默认设置(RDB快照),守护程序或操作系统也必须崩溃才能看到完整性损坏。

AOF设置使用仅附加文件记录服务器接收的命令,并在冷启动时从保存的文件重新创建数据库。默认的磁盘同步策略是每秒刷新一次(IIRC),但可以设置为锁定并写入每个命令。

同时使用快照和增量日志似乎提供了一个长期的不介意 - 如果我错过了几秒钟的数据方法安全但昂贵的增量日志。 Redis支持开箱即用的群集,因此也可以进行复制。

我自己使用默认的RDB设置并将快照保存到远程FTP。我还没有看到导致数据丢失的故障。很可能是急性硬件故障或停电,但我是在VPS上托管的。发生这种情况的可能性很小:)

答案 2 :(得分:6)

这个问题实际上是关于实时会话,并且似乎部分是由于对短语“延迟写入操作”的误解而引起的。虽然细节最终在评论中得到了澄清,但我只是想让它变得更加清晰......

实施实时会话时没有任何问题。

Redis是一个内存中键值存储,可选择持久化到磁盘。 '延迟写入操作'指的是写入磁盘,而不是通常存储在内存中的数据库。如果您设置了一个键/值对,您可以立即获取它(即实时)。您选择的关于持久性的策略(延迟写入的次数)将决定崩溃中可能丢失的数据的上限。