• 展开微博窗口
  • QQ:52619941
  • 微信:cnmemory
  • 展开分类目录
  • 还没有账号?

Memory

布隆过滤器的原理

布隆过滤器是一种空间利用率高,可以用来对数据进行排重过滤处理的数据结构,具有以下两点特征:

  • 判定为不存在的数据一定不存在
  • 判定为存在的数据可能存在也可能不存在

存在的数据如果实际上并不存在,称为false positive,那么为什么会有这种现象呢?

布隆过滤器是通过k个hash函数将某个key映射到m个的比特位上。那么某个key的比特位有可能会被其他的一个或多个key占用,即会产生误判为存在的情况,所以这个误判率取决于k(hash函数个数)、m(比特位个数)、n(元素个数),关于误差率推导,由于我的数学比较不好,还没领悟透彻,可以参考网络上其他文章。

因为比特位非0既1,且多个key共享比特位,也导致了布隆过滤器无法删除已添加的元素,因为删除某个key会影响到其他key。

当然还有一些其他变种的布隆过滤器使得可以删除元素,例如将比特位变成一个计数器,删除元素时只需要将计数器-1即可。…

CLI下php进程假死问题排查

首先通过strace命令跟踪假死进程的系统调用信息

strace -p 16618

执行以上命令后,得到如下结果

poll([{fd=33, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=33, events=POLLOUT}], 1, 1000) = 0 

利用swoole的task进程和redis实现队列任务

swoole简介

面向生产环境的 PHP 异步网络通信引擎,可以通过该扩展快速创建TCP/UDP服务端、Http服务端、websocket服务端。

Task进程简介

如果没有接触过swoole可以先上swoole官网了解swoole的进程模型

swoole_server中提供了task的进程,用来异步处理耗时的任务,只需要配置swoole_server时设置task_worker_num即可启用task进程,在worker进程中使用$server->task(array $data)进行任务的投递,但是在任务耗时且量大的情况下会出现任务丢失的现象,所以决定采用第三方来实现队列,来确保数据的完整和可靠性。…

实战直播平台开发之初窥门径(一)

前几天,接到一个需求,需要构建一个简单的直播平台,这也是第一次接触到直播方面的开发任务,带着学习与挑战的精神决定记录下来这次开发的全过程。

经过几番查阅资料,对于如何构建一个直播平台有了一些初步的概念。

1、协议

首先来说说直播的协议,在查阅资料的过程中发现以下三种普遍应用的协议。

  1. RTMP(Real Time Messaging Protocol)
  2. RTSP(Real Time Streaming Protocol)
  3. HLS(HTTP Live Streaming)

关于这三种协议,前二者是基于TCP/UDP进行实时的数据传输,HLS则是采用了…

计算机中的字、字节、字长

在计算机中每8位二进制数字构成一个字节,若干个字节组成一个字,而这个字的二进制位数就是字长。

星期五

php基于libevent实现并发socket服务端

通常提到PHP,很多人都认为它只能做Web项目,当然,在Web开发时也的确能够体现出PHP迅敏开发的优势。

那么我们能否单纯的用PHP开发网络服务端?我们从最简单的做法开始尝试。

如下面一段代码,想要用PHP来实现一个socket服务端相对来说还是比较简单的。

$ip = '127.0.0.1';