8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

CodeIgniter + Redis 的 Session 使用速度很慢

AndyP9 2月前

55 0

我正在使用 CodeIgniter 3 迁移我的应用程序以使用 Redis 作为会话管理器,但是由于它在 AJAX 中发出许多请求,我注意到它们往往需要更长的时间,11 个请求总共需要 300 毫秒...

我正在使用 CodeIgniter 3 迁移我的应用程序以使用 Redis 作为会话管理器,但是由于它在 AJAX 中发出许多请求,我注意到它们往往需要更长的时间,总共花费 300 毫秒的 11 个请求现在需要 11 秒。

我做了一些代码更改,在每个控制器的开头获取所有会话,将值放入模型中,然后运行 session_write_close() .

请求时间甚至有所改善,将时间降低到平均 3 - 5 秒,但远非理想。

阅读 CodeIgniter 文档时我看到了这一点:

CodeIgniter 的 Session 库不使用实际的 'redis'session.save_handler。

因此,我决定禁用本机 CodeIgniter 会话的自动加载,并 session_start() 在获取会话值和提供我的模型之前直接在控制器的开头使用。

令我惊讶的是,应用程序在不到 300 毫秒的时间内再次读取了数据。即使不再使用 session_write_close() ,它​​仍然以相同的速度继续运行。

CodeIgniter 可能发生了什么问题,导致连接和读取 Redis 中的会话需要更长时间?

帖子版权声明 1、本帖标题:CodeIgniter + Redis 的 Session 使用速度很慢
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由AndyP9在本站《codeigniter》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 登录并重定向到主页后,暂存服务器(PHP 7.4)突然无法在会话上正常工作,会话丢失/为空。系统使用 CI 3.0.6 并使用 $config['sess_driver...

    登录并重定向到主页后,暂存服务器(PHP 7.4)突然无法在会话上正常工作,会话丢失/为空。

    系统使用 CI 3.0.6 并使用 $config['sess_driver'] = 'database';

    请注意,我可以在本地(PHP 7.4)和生产(PHP 7.0)上成功登录并正确重定向

    我已经尝试将 php.int session.auto_start=0 更新为 session.auto_start=1

    并且还尝试将 CI Session.php 从 ini_set('session.name', $params['cookie_name']); 更改为 ini_set('session.id', $params['cookie_name']);

    但这些都不起作用。

    我还发现 ci_sessions 数据没有插入数据库的表中。

  • lhf 2月前 0 只看Ta
    引用 3

    @daryn-k 根据我在 CodeIgniter 论坛/github 上检查的结果,它执行了 1 秒的

  • 你好@PracticalOpportunist,根据我的调查,一般来说,我的服务器会在重定向后删除会话。这个问题与框架无关,但我仍在检查为什么我的服务器在重定向后不保存会话

  • 我已经修复了这个问题。问题与 CI3 无关,而在于 PHP 配置,其中会话文件夹没有足够的写入权限。谢谢!

  • 我可以使用 post 请求实现 get/put/delete 请求所实现的任何功能(通过编写方法内部的逻辑)。那么使用不同的方法有什么意义呢?必须有

    我可以使用 post 请求实现 get/put/delete 请求所实现的任何功能(通过编写方法内部的逻辑)。那么使用不同的方法有什么意义呢?

    除了最初创建此方法分类的语义之外,肯定还有更好的理由。列出我在帖子中实现任何方法的想法不起作用的所有场景。

    我知道下面的代码看起来很幼稚,但我正在寻找一个不应该这样做的好理由:

    在此先感谢您的帮助。

     @PostMapping("/add")
    public ResponseEntity<?> add(@RequestBody Something something) {
        try {
            Something result = someService.add(something);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e);
        }
    }
    
    @PostMapping("/getAll")
    public ResponseEntity<?> getAll() {
        try {
            List<Something> result = someService.getAll();
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e);
        }
    }
    
    
  • 您也可以在不使用 HTTP 的情况下实现相同的功能。那么为什么要费心呢?主要原因是与其他工具(如浏览器)的正确集成。浏览器将以不同的方式处理 GET 和 POST 请求(例如缓存)。其他工具也是如此。另一个原因是其他程序员更容易推理这样的代码(尽管我个人不喜欢 REST)。但最终这取决于你,没有人会强迫你做任何事情。

  • 如果我可以用螺丝刀启动我的汽车,我不会指望每个人都这样做,也不会问我为什么不这样做。对于大多数人来说,遵循某种代码原则、规范很方便。毕竟有 REST。有时它可能含糊不清,但我总是乐于使用根据一些常识构建的代码。“我为什么要遵循这些原则?”的答案是 - 你不应该

  • 不确定为什么人们会将其否决为“基于观点”,因为这完全是事实原因。也就是说,“列出所有方法”并不是提出问题的好方法。

  • @Evert 感谢 Evert 的意见。事实上,这是我的第一个问题。这将改善我的提问方式

返回
作者最近主题: