mage2pro/php-redis-session-abstract

基于Redis的会话处理器,具有乐观锁功能

1.3.8 2017-12-29 08:47 UTC

This package is auto-updated.

Last update: 2024-08-29 04:54:18 UTC


README

基于Redis的会话处理器,具有乐观锁功能。

特性

  • 当会话数据大小超过压缩阈值时,会话数据将被压缩。
  • 支持的压缩库有 'gzip', 'lzf', 'lz4', 和 'snappy'。
    • Gzip是最慢的,但提供最佳的压缩比。
    • Lzf可以通过PECL轻松安装。
    • Lz4由HHVM支持。
  • 可以在不丢失会话数据的情况下动态启用、禁用或重新配置压缩。
  • 过期由Redis处理;无需垃圾收集。
  • 记录会话未写入时的日志(由于未获得或丢失锁)。
  • 限制并发锁请求的数量。
  • 检测空闲等待进程以防止并发节流中的假阳性。
  • 检测崩溃的进程以防止会话死锁(仅限Linux)。
  • 为爬虫和机器人提供较短的会话生命周期以减少资源浪费。
  • 可以完全禁用锁定

锁定算法属性

  • 只能有一个进程可以在会话上获得写锁。
  • 如果另一个进程将其破坏,进程可能会丢失其锁,在这种情况下,会话将不会被写入。
  • 锁可能在 BREAK_AFTER 秒后被破坏,并且获取锁的进程是不确定的。
  • 只有 MAX_CONCURRENCY 个进程可以等待同一个会话的锁,否则将抛出 ConcurrentConnectionsExceededException

压缩

会话数据压缩效果非常好,因此使用压缩是一种在不分配大量Redis RAM的情况下增加容量并减少网络利用率的绝佳方式。默认的 compression threshold 是 2048 字节,因此等于或大于此大小的任何会话数据都将使用默认的 compression_lib(gzip)进行压缩。可以通过将 compression_lib 设置为 none 来禁用压缩。然而,lzfsnappy 都提供了与压缩比相当的速度较快的压缩,所以我强烈建议如果您有root权限,使用其中之一。lzf可以通过pecl轻松安装。

sudo pecl install lzf

注意:如果您使用suhosin并启用了会话数据加密(默认为 suhosin.session.encrypt=on),则有两件事

  1. 您可能会得到非常差的压缩比。
  2. 在我的经验中,lzf无法压缩加密数据。不知道为什么...

如果任何压缩库无法压缩会话数据,将在 system.log 中记录错误,并且会话仍将以未压缩的形式保存。如果您启用了 suhosin.session.encrypt=on,我会建议您禁用它(除非您是在共享主机上,因为Magento已经执行了自己的会话验证)或禁用压缩,或者至少不要在启用加密的情况下使用lzf。

机器人检测

爬虫和爬虫通常不使用cookie,这意味着您可能正在存储成千上万的没有实际用途的会话。更糟糕的是,攻击者可能会通过淹没您的后端来使用您有限的会话存储来对付您,从而迫使您的合法会话被逐出。但是,您不希望错误地将用户识别为机器人并意外终止他们的会话。此模块使用正则表达式以及会话写入次数计数来确定会话生命周期。

Cm_Cache_Backend_Redis一起使用

使用Cm_RedisSession和Cm_Cache_Backend_Redis一起使用应该没有任何问题。然而,强烈建议即使它们在同一个服务器上运行,也应该运行两个独立的Redis实例。实际上,运行两个实例会表现得更好,因为Redis是单线程的,所以在多核服务器上受限于单个核心的性能。此外,为缓存和会话分配不同数量的内存,并强制执行不同的“maxmemory”策略也是有意义的。如果您必须运行一个Redis实例来处理两者,那么就请不要使用相同的'db'编号。但再次强调,最好是运行两个Redis实例。

许可证

@copyright  Copyright (c) 2013 Colin Mollenhour (http://colin.mollenhour.com)
This project is licensed under the "New BSD" license (see source).