分类 Redis 下的文章

什么是二进制安全?

C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含“0”(空字符),否则字符串中的“0”将被误认为是字符串结束符,这些限制使得C字符串只能保存文本数据,而不能保存像图片、音频、视频、压缩文件这样的二进制数据。而PHP的字符串则不同,其支持二进制数据的存储,PHP在处理带二进制字符的字符串时,程序不会对其中的数据做任何限制、过滤或者假设,数据在写入时是什么样的,它被读取时就是什么样,这种能力称为字符串的二进制安全。

PHP字符串与C字符串

- 阅读剩余部分 -

Redis 的所有数据皆存储在内存中, 虽然现在内存越来越便宜, 但是相对于硬盘来说还是很昂贵, 因此如何高效利用Redis内存变得很重要。

内存消耗

内存消耗不可避免,但是可以通过调整参数和合理利用来规避内存浪费。 Redis内存消耗分为进程自身消耗和子进程消耗。

1. 内存使用统计

首先需要了解Redis自身使用内存的统计数据, 可以通过执行 info memory 命令获取内存相关指标。

- 阅读剩余部分 -

缓存的收益和成本分析

收益如下:

1. 加速读写,因为缓存通常是全内存的,如redis,而存储层的读写性能通常不够强悍,如MySQL,通过缓存可以有效加速读写,优化用户体验。
2. 降低后端负载,帮助后端减少访问量和复杂计算,很大程度上降低了后端负载。

成本如下:

1. 数据不一致,根据更新策略的不同,会存在存储层与缓存层数据不一致的情况。
2. 代码维护成本,加入缓存后,需要同时处理缓存层和存储层的逻辑,增加了开发者维护代码的成本。
3. 运维成本,增加了缓存服务器。

- 阅读剩余部分 -

提供两种连接方式:

    public function connect( $host, $port = 6379, $timeout = 0.0, $reserved = null, $retry_interval = 0 ) {}

    public function pconnect( $host, $port = 6379, $timeout = 0.0, $persistent_id = null ) {}

connect 是直连, 在一次web请求中, 重新建立连接, 发送命令, 得到响应,然后断开连接。

pconnect 是长连接,跟 php-fpm 子进程的生命周期保持一致, 连接会在后续的请求中重用。

分析

为了验证上面的结论, 先修改php-fpm的配置文件, 保证只有一个php-fpm子进程。

https://i.loli.net/2019/03/22/5c948ce249869.jpg

- 阅读剩余部分 -