与Redis存储会话有多安全?

Tre*_*ent 84 session redis

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

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

有谁遇到过这样的问题?

Sri*_*nan 137

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

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

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


Mor*_*sen 14

基本上有两种主要类型:async snapsnots和fsync().他们分别被称为RDB和AOF.有关官方页面上的持久性模式的更多信息.

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

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

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

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


Jor*_*son 7

这个问题实际上是关于实时会话的,似乎部分是由于对“延迟的写操作”一词的误解而引起的。尽管最终在评论中提到了细节,但我只是想让它变得更加简洁。 ..

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

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