Swoole

面试官问:你说说Redis的几个过期策略?

这一生的挚爱 提交于 2021-02-19 10:47:41
在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的。 设置过期时间 expire key time(以秒为单位) 这是最常用的方式 setex(String key, int seconds, String value) 字符串独有的方式 除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间如果没有设置时间,那缓存就是永不过期如果设置了过期时间,之后又想让缓存永不过期,使用persist key 三种过期策略 定时删除 在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除 优点: 保证内存被尽快释放 缺点: 若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key 定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重 懒汉式式删除 key过期的时候不删除,每次通过key获取值的时候去检查是否过期,若过期,则删除,返回null。 优点: 删除操作只发生在通过key取值的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的

PHP 扩展 trie-tree, swoole过滤敏感词方案

倖福魔咒の 提交于 2021-02-14 17:45:10
在一些app,web中评论以及一些文章会看到一些*等,除了特定的不显示外,我们会把用户输入的一些敏感字符做处理,具体显示为*还是其他字符按照业务区实现。 下面简单介绍下业务处理。 原文地址:小时刻个人博客 > http://small.aiweimeng.top/index.php/archives/18.html php扩展安装说明: 1.安装php扩展trie-tree,安装教程 http://blog.41ms.com/post/39.html 2.安装swoole扩展,安装教程 http://www.swoole.com/ **代码说明:** 1.reload_dict.php,提供自动更新字典库到trie-tree文件的过程 /** * 词库维护更新. * Date: 2018/11/7 * Time: 9:42 */ // 设置内存 ini_set('memory_limit','128M'); // 读取敏感词字典库 $handle = fopen('dict.txt','r'); // 生成空的trie-tree-filter $resTrie = trie_filter_new(); while (! feof($handle)) { $item = trim(fgets($handle)); if(empty($item)) { continue; } //

centos安装netcat TCP UDP测试工具 简称 nc,安全界叫它瑞士军刀

我们两清 提交于 2021-02-14 08:33:16
centos安装netcat 今天安装swoole后,测试UDP服务需要用到netcat,然而百度了很多安装方法,并没有一个好用的。几经尝试,终于安装成功,现在就分享给大家,以供参考。 配置环境:centos6.5 1.下载安装包 wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz 2.解压缩文件 tar -zxvf netcat-0.7.1.tar.gz -C /usr/local 3.切换至/usr/local/netcat-0.7.1   1>查看编译配置文件    ./configure   2>编译安装    make && make install 4.配置   1>切换至/etc   2>编辑配置文件 vim /etc/profile ,加入: 2、配置 vim /etc/profile 添加以下内容: # set netcat path export NETCAT_HOME=/usr/local/netcat export PATH=$PATH:$NETCAT_HOME/bin 保存,退出,并使配置生效: source /etc/profile   3>生效配置      source /etc/profile   4>查看netcat是否已经生效  

基于Swoole和Redis实现的并发队列处理系统

耗尽温柔 提交于 2021-02-01 20:18:33
背景 由于 PHP 不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。 大家知道,一个消息队列处理系统主要分为两大部分:消费者和生产者。 在我们的系统中,主系统作为生产者,任务系统作为消费者。 具体的工作流程如下: 1、主系统将需要需要处理的任务名称+任务参数push到队列中。 2、任务系统实时的对任务队列进行pop,pop出来一个任务就fork一个子进程,由子进程完成具体的任务逻辑。 具体代码如下: /** * 启动守护进程 */ public function runAction() { Tools::log_message( 'ERROR' , 'daemon/run' . ' | action: restart' , 'daemon-' ); while (true) { $this ->fork_process(); } exit ; } /** * 创建子进程 */ private function fork_process() { $ppid = getmypid(); $pid = pcntl_fork(); if ( $pid == 0 ) { // 子进程 $pid = posix_getpid(); // echo "* Process {$pid} was created nn"

PHP程序员在二三线城市更受欢迎

一曲冷凌霜 提交于 2021-02-01 12:56:43
PHP 开发工程师处在初级、中级和高级阶段需要掌握的技能也不同,本文分享 PHP 工程师处在不同阶段下需要掌握的技能。 PHP 初级开发工程师 PHP 初级开发工程师需要掌握的技能 1. 走进 PHP 的世界 PHP 介绍、 PHP 版本发展历史、 PHP 薪资水平和职业发展、WEB开发中基础概念介绍、 PHP 开发环境搭建、HTML+CSS等入门内容。 2. PHP 基础语法 变量、数据类型、常量、流程控制、运算符、字符串、数组、函数等。 3. PHP 进阶 HTTP协议、超全局变量,会话控制(session,cookie),文件系统,上传文件,图像处理等。 4. MySQL数据库 库,表,字段类型,SQL语句,事务,锁,表引擎,索引,函数,存储过程,视图等 5. PHP 操作MySQL数据库 使用mysql扩展函数操作数据库,实现增,删,改,查,搜索,排序,翻页等功能。 6.实现常用的功能模块 注册,登录,记住登录状态,找回密码,无限级,权限(RBAC)等。 7. 网站安全 SQL注入,XSS(跨站脚本攻击),CSRF(跨站请求伪造),ARP攻击,DDOS攻击,撞库,钓鱼网站,SSL等。 8.微信接口开发 微信号申请、微信类型、接收消息、发送消息、微信JS-SDK、微信支付等。 9. Soket编程 socket、TCP/UDP、构造HTTP协议字符串、发送协议、XML

怎么理解Laravel的核心架构

不羁的心 提交于 2021-02-01 05:37:32
使用过larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?今天就和大家详聊一下。 首先应该了解laravel框架的架构模式(设计核心,laravel 框架是使用服务组件化的开发模式开发的,laravel框架就是由不同的服务组件构成的) laravel 里面多个服务提供者构成了laravel组件。分层设计:把相同功能的类库放在同一个文件夹里面。 laravel框架有多个类组成服务,由多个服务组成组件。类 -> 服务 -> 组件 laravel使用组件化的开发模式,多个类 -> 服务 -> 组件,多个类组成服务,多个服务构成组件。 多个组件提供不同的服务,然后多个服务构成我们的项目。 请求生命周期 大概的流程如图: 理论上,生命周期主要有这么些阶段,但其中,开发者大多数只需关注 路由、中间件、控制器、闭包函数、逻辑处理 等几步 当然,每一步的内部,还是会有更多细化的执行流程,在这里,一般不深入研究框架或改造框架,很少会细化研究,但研究底层,依旧是学习的好选择。 服务 说的就是提供给你所需要的东西,在laravel里面所提供的服务有 认证服务、数据库服务、缓存服务、队列服务等等。laravel框架所有服务都定义在了 app/config/app.php 里面

PHP网站开发—网站架构优化性能概念

℡╲_俬逩灬. 提交于 2021-01-25 17:34:38
最开始的网站架构 最初业务量不大,访问量小,此时的架构,应用程序、数据库、文件都部署在一台服务器上,有些甚至仅仅是租用主机空间 1. 应用、数据、文件分离 将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。 2. 利用缓存改善网站性能 大部分网站访问都遵循28原则,即80%的访问请求,最终落在20%的数据上,所以我们可以对热点数据进行缓存,减少热点数据的访问路径,提高用户体验。缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理。 2.1 本地缓存 本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。 2.2 分布式缓存 分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。 2.3 反向代理 部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的成本。 2.4 CDN 假设我们的服务器都部署在杭州的机房,对于浙江的用户来说访问是较快的,而对于北京的用户访问是较慢的

网站架构优化性能概念

核能气质少年 提交于 2021-01-23 20:38:34
最开始的网站架构 最初业务量不大,访问量小,此时的架构,应用程序、数据库、文件都部署在一台服务器上,有些甚至仅仅是租用主机空间 1. 应用、数据、文件分离 将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。 2. 利用缓存改善网站性能 大部分网站访问都遵循28原则,即80%的访问请求,最终落在20%的数据上,所以我们可以对热点数据进行缓存,减少热点数据的访问路径,提高用户体验。缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理。 2.1 本地缓存 本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。 2.2 分布式缓存 分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。 2.3 反向代理 部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的成本。 2.4 CDN 假设我们的服务器都部署在杭州的机房,对于浙江的用户来说访问是较快的,而对于北京的用户访问是较慢的

教程|ZKEYS公有云业务管理系统(国际版)部署

妖精的绣舞 提交于 2021-01-20 17:36:04
ZKEYS 公有云业务管理系统(国际版)一键部署操作主要分两个部分: Swoole Loader 安装说明 及一键部署。 一、Swoole Loader 安装说明 1. PHP 版本: ( 1 )请使用 PHP 5.6(64位)版本 ( 2 )可打开 php info页面或者 php -v确认版本信息 注意: Swoole Loader不支持Debug版本,请安装非Debug版本的 PHP ,可使用命令 php -i | grep "Debug Build" 查看是否有 Debug Build => no ,如为 yes 则不支持 2.安装和配置Swoole Loader ( 1 )下载 Swoole Loader Windows可使用命令: php -i | find /n "Thread Safety" , Linux 可使用命令: php -i | grep "Thread Safety" 查看线程安全设置,如果显示 Thread Safety => disabled ,请选择非线程安全版本。 请根据 PHP 版本下载 对应版本的 Swoole Loader扩展 。 Windows: PHP 5.6 线程安全版本 PHP 5.6 非线程安全版本 Linux: PHP 5.6 线程安全版本 PHP 5.6 非线程安全版本 ( 2 )安装 Swoole Loader

lnmp 的swoole安装以及部分问题解决

泄露秘密 提交于 2021-01-17 04:02:57
服务器环境:ubuntu+nginx+php7.0 1.安装nghttp2库: sudo apt-get install nghttp2 或者 sudo wget https://github.com/nghttp2/nghttp2/releases/download/v1.30.0/nghttp2-1.30.0.tar.bz2 sudo tar -jxvf nghttp2-1.30.0.tar.bz2 cd nghttp2-1.30.0 sudo ./configure sudo make && make instal 2.下载swoole : sudo pecl install swoole 在进行编译的时候,根据自己需求选择开启的扩展(PostgreSQL 这个选项我选择的是no) 3.修改php.ini cd /etc/php/7.0/cli sudo vi php.ini 加入 extension=swoole.so 保存退出。 附: 确认php.ini的位置 sudo php -i|grep php.ini 如果在执行php -v报错如下 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/swoole.so' - libnghttp2.so.14: cannot