用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3522|回复: 10
收起左侧

[讨论/交流] CI3如何使用多个Redis

[复制链接]
发表于 2016-11-23 11:16:58 | 显示全部楼层 |阅读模式
项目需要记录日志,比如用户点击了某个视频,收藏了某个视频等等。

打算日志的记录使用redis缓存,但是考虑到日志量比较大,想跟现有的缓存分开来,使用一个新的redis数据库。这样的话php这边需要同时保持两个redis数据库的连接,新的redis用来储存日志信息。请问如何实现?

我看了CI的源码,好像是Cache里面默认只有一个redis,然后初始化这个redis的时候默认载入了config目录下面名字为redis的配置。如果要新增redis,是否必须新建一个叫Cache_redisnew的文件,然后Cache.php里面加入redisnew,再修改载入的config,加一个redisnew.php的配置?
发表于 2016-11-23 13:46:50 | 显示全部楼层
可以直接使用 redis 呀,不一定非得要使用 Cache 里的。
 楼主| 发表于 2016-11-23 14:53:34 | 显示全部楼层
Hex 发表于 2016-11-23 13:46
可以直接使用 redis 呀,不一定非得要使用 Cache 里的。

怎么直接使用redis呢?我看用户手册里面好像没有提到?
 楼主| 发表于 2016-11-23 16:07:34 | 显示全部楼层
Hex 发表于 2016-11-23 13:46
可以直接使用 redis 呀,不一定非得要使用 Cache 里的。

如果直接使用redis,怎么将这个redis连接保持长连接呢?按照普通的逻辑,是每次用户发来的请求都重新创建一次的。
发表于 2016-11-23 16:26:26 | 显示全部楼层
liaow10 发表于 2016-11-23 16:07
如果直接使用redis,怎么将这个redis连接保持长连接呢?按照普通的逻辑,是每次用户发来的请求都重新创建 ...

这个和原生 PHP 没区别的,用相关的 redis 函数就可以了。另外,你需要的长连接是由 redis 提供的,PHP 的运行机制就是,每次请求都是:创建->运行->销毁,这是 PHP 的运行机制决定的。
 楼主| 发表于 2016-11-23 16:57:39 | 显示全部楼层
Hex 发表于 2016-11-23 16:26
这个和原生 PHP 没区别的,用相关的 redis 函数就可以了。另外,你需要的长连接是由 redis 提供的,PHP  ...

还没太懂。。
我的理解是,因为每次都创建一个$_redis的变量,每次都connect,连接成功之后进行数据库操作。而前面的那个connect等操作其实不需要每次都做的,维持一个连接的引用以便每次使用的时候可以直接用。PHP运行时每次都重新创建,所以就没有这样可以维持的全局变量了。请问这种问题怎么解决呢?还是说就使用PHP的机制,每次都直接connect再操作?
发表于 2016-11-23 17:43:05 | 显示全部楼层
liaow10 发表于 2016-11-23 16:57
还没太懂。。
我的理解是,因为每次都创建一个$_redis的变量,每次都connect,连接成功之后进行数据库操 ...

是的,PHP就是这样每次都要重新开始,这是 PHP 的特色。但是,对于长连接,比如 MySQL 是由 MySQL 的 PHP 扩展(或 client)来实现长连接,也就是说,连接的维持是在扩展层面做的,这个东西和 CI 是没关系的,这是 PHP 基础知识。

关于 CI 里的 Redis 实际上也是调用的 PHP 的 Redis 函数,关于 PHP Redis 知识可以参考 https://github.com/phpredis/phpredis#readme
 楼主| 发表于 2016-11-28 10:03:57 | 显示全部楼层
Hex 发表于 2016-11-23 17:43
是的,PHP就是这样每次都要重新开始,这是 PHP 的特色。但是,对于长连接,比如 MySQL 是由 MySQL 的 PHP  ...

感谢Hex!明白了!
像我们的项目,其实不负责渲染网页出来,只是负责根据对应的URL请求做相应的逻辑处理以及数据库操作,这种需求,是不是用PHP其实也不太合适?因为效率上感觉用Python等语言会更快一些?
发表于 2016-11-28 10:27:52 | 显示全部楼层
liaow10 发表于 2016-11-28 10:03
感谢Hex!明白了!
像我们的项目,其实不负责渲染网页出来,只是负责根据对应的URL请求做相应的逻辑处理 ...

你这个用 JAVA 也不错吧,当然也要看团队的技术栈。
其实 PHP 的性能本身是没问题的,很多时候性能的瓶颈是 IO,而不是 PHP,这个还需要综合来考量整体的系统架构。
 楼主| 发表于 2016-11-28 10:49:27 | 显示全部楼层
Hex 发表于 2016-11-28 10:27
你这个用 JAVA 也不错吧,当然也要看团队的技术栈。
其实 PHP 的性能本身是没问题的,很多时候性能的瓶颈 ...

嗯嗯,目前框架是LAMP,感觉好慢好慢。。。Apache使用的是prefork模式,最多并发1000.

本版积分规则