think-swoole 连接池 和 Table高性能共享内存

连接池

连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。

基本原理是这样的:
建立数据库连接池对象(服务器启动)。
按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
存取数据库。
关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)

think-swoole 默认有实现数据库和缓存连接池功能,涵盖了日常开发的主要场景。
最新的swoole版本支持一键协程,比如redis、mysql等等,很方便。连接池是在这个基础上,解决一些问题和对性能的再一次提升。

使用think-swoole的连接池,需要/config/swoole.php配置文件:

具体使用上和以前没有任何区别:
think\facade\Db、KaTeX parse error: Undefined control sequence: \facade at position 27: …db、模型使用一致 think\̲f̲a̲c̲a̲d̲e̲\Cache、this->app->cache
在这里插入图片描述

Table高性能共享内存

Table一个基于共享内存和锁实现的超高性能,并发数据结构;用于解决多进程/多线程数据共享和同步加锁问题。

优势:
性能强悍,单线程每秒可读写 200 万次;
应用代码无需加锁,Table 内置行锁自旋锁,所有操作均是多线程 / 多进程安全。用户层完全不需要考虑数据同步问题;
支持多进程,Table 可以用于多进程之间共享数据;
使用行锁,而不是全局锁,仅当 2 个进程在同一 CPU 时间,并发读取同一条数据才会进行发生抢锁。

注意:
Table 使用共享内存来保存数据,在创建子进程前,务必要执行 Table->create() ;
Server 中使用 Table,Table->create() 必须在 Server->start() 前执行。
可以像数组使用foreach和count,但请勿在遍历期间进行删除操作(可将所有 key 取出后进行删除)
不要使用数组方式读写 Table,一定要使用文档中提供的 API 来进行操作

Swoole\Table创建表
在这里插入图片描述

Swoole\Table操作

在这里插入图片描述

在这里插入图片描述
Think\Swoole\Table thinkphp-swoole 下的使用

Think\Swoole\Table是think-swoole中对Swoole\Table使用的在一次封装,开发者可以在配置文件中定义好Table字段结构,由think-swoole自动帮你创建它,然后其他地方直接存取值即可。
在config/swoole.php的tables配置文件中配置需要创建的内存表结构
在这里插入图片描述

在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读