2015
05-12

剖析Redis过期key的删除策略

最近在阅读《Redis设计与实现》这本书,书中关于Redis的实现原理,做了相对详细的介绍与说明。
Marser整理了Redis中对于过期key的几种删除策略。下面Marser来带你装逼带你飞,带你熬翔到天黑。

Redis中过期key的删除策略,分为三种:定时删除、定期删除、惰性删除。
其中,定时删除和定期删除是主动删除策略,惰性删除是被动删除策略。
下面就来逐一介绍这三种删除策略的原理及其优缺点。

1、定时删除

定时删除是在设置key的过期时间的同时,会创建一个定时器(timer)。定时器在key的过期时间来临时,立即执行对key的删除操作。
此种删除策略可以保证过期key会尽可能快的被删除,并释放过期key所占用的内存。
但是此种策略对CPU时间是最不友好的。在过期key比较多的情况下,删除过期key这一行为可能会占用相当一部分CPU时间,在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前任务无关的过期key上,无疑会对服务器的响应时间和吞吐量造成影响。
例如,正有大量的命令请求在等待服务器处理,并且服务器当前不缺少内存的情况下,服务器应当优先将CPU时间用在处理客户端的命令请求上面,而不是用在删除过期key上面。
并且创建一个定时器(timer)需要用到Redis服务器中的时间事件,而当前时间事件是用无序链表实现的,查找一个事件的时间复杂度为O(N),并不能高效地处理大量时间事件。要让服务器创建大量的定时器,从而实现定时删除,在现阶段来说并不现实。

查看全文 >
2015
03-19

Phalcon调试大杀器之phalcon-debugbar安装 HOT

Phalcon 是一款非常火的高性能C扩展php开发框架。特点是高性能低耦合,但遗憾的是长期缺少一款得力的调试辅助工具。

感谢作者“老朱”,现在phalcon也有了专属的debug工具: Phalcon Debugbar。从今天起phalcon开发者们再也不用羡慕Zf,Laravel,Ci等集成了php debug bar的框架,因为phalcon已经正式成为了其中一员。目前版本主要以Laravel debugbar的具有功能为蓝本开发,并针对phalcon的功能特征进行了小幅更改,未来版本还将针对phalcon的功能进行进一步扩展丰富。项目地址:http://git.oschina.net/zhuyajie/phalcon-debugbar

readme.md中只是粗略的介绍了phalcon-debugbar的安装方式,新学者可能很难理解其中的安装步骤,Marser下面将给大家介绍下详尽的安装步骤。


1、安装composer

composer是PHP用来管理依赖(dependency)关系的工具。可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮助安装这些依赖的库文件。安装命令如下:

cd /usr/local/src
curl -sS https://getcomposer.org/installer | php
#移动目录,进行全局安装
mv composer.phar /usr/local/bin/composer
查看全文 >
2015
02-28

centos安装memcached

emcached是一个高性能的分布式内存对象缓存系统。通过在内存里维护一个统一的巨大的hash表,来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果。简单的说,就是将磁盘中的数据存储在内存中,然后程序直接从内存中读取数据,减少磁盘的I/O开销,从而提高数据的读取速度。下面来介绍memcached的安装方法。


1、安装memcached服务端

下载memcached服务端,并解压:

cd /usr/local/src
wget http://www.memcached.org/files/memcached-1.4.22.tar.gz
tar -zxvf memcached-1.4.22.tar.gz
cd memcached-1.4.22
./configure
make && make install


2、查看memcached是否安装成功
memcached -V #注意是大写
查看全文 >
2015
01-26

centos编译安装 Git

centos安装Git有两种方式,一种通过源安装,通过如下命今,即可一键安装成功:

yum -y install git

但是通过源安装的Git,目前最高版本是1.7,想要使用更多新功能、更新版本的Git,就只能通过编译安装的方式来进行安装了,下面就来具体介绍这种安装过程。


1、先安装依赖包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel


2、下载Git源码包,并解压
cd /usr/local/src
wget https://github.com/git/git/archive/v1.9.5.tar.gz
tar -zxvf git-1.9.5.tar.gz
查看全文 >
2015
01-23

zendstudio识别Phalcon语法及提示

Phalcon是一个开源的、全堆栈的PHP5框架,使用C扩展编写,专门为高性能优化。无需学习和使用C语言,所有函数都以PHP类的方式呈现。
在Zend studio编辑器中进行Phalcon框架代码开发时,IDE无法对Phalcon框架内的对象、函数与方法进行语法提示。下面就来介绍下,如何让zend studio这个IDE支持Phalcon的语法提示。

1、下载代码提示包,然后解压

https://github.com/rogerthomas84/PhalconPHPDoc

2、打开“/your/workspace/.metadata/.plugins/org.eclipse.php.core/language/”目录,会看到当前目录下,有一些类似“555a446a”或者“7697c88c”的目录,这些目录名称是随机生成的,每个目录当中都要将刚才解压后的Phalcon整个目录文件复制进去,否则不会生效

查看全文 >
2015
01-21

base62编码

Base62编码是由10个数字、26个大写英文字母和26个小写英文字母组成,多用于安全领域。本文将介绍对数字进行Base62编码与解码的方法。

直接上代码,如下:

        /**
         * base62编码与解码key,由10个数字、26个大写英文字母和26个小写英文字母组成
         * @var string
         */
        private $key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';

        /**
         * base62编码
         * @param string $str
         * @return string
         */
        public function base62_encode($str) {
            $out = '';
            for($t=floor(log10($str)/log10(62)); $t>=0; $t--) {
                $a = floor($str / pow(62, $t));
                $out = $out.substr($this->key, $a, 1);
                $str = $str - ($a * pow(62, $t));
            }
            return $out;
        }

        /**
         * base62解码
         * @param string $str
         * @return string
         */
        public function base62_decode($str) {
            $out = 0;
            $len = strlen($str) - 1;
            for($t=0; $t<=$len; $t++) {
                $out = $out + strpos($this->key, substr($str, $t, 1)) * pow(62, $len - $t);
            }
            return substr(sprintf("%f", $out), 0, -7);
        }

        /**
         * 测试程序
         */
        public function indexAction(){
            header('content-Type:text/html;charset=utf-8');
            $equal = $notequal = 0;
            for($i=0; $i<10000000; $i++){
                $encode = $this -> base62_encode($i);
                $decode = $this -> base62_decode($encode);
                if($decode == $i){
                    $equal++;
                }else{
                    $notequal++;
                    echo "{$i}---{$encode}---{$decode}<br />";
                }
            }
            echo "相等{$equal},不相等{$notequal}<br />";

        }
查看全文 >
2015
01-12

centos下安装phpredis扩展

上一节介绍了《centos下安装redis》,系统安装了redis之后,但是php程序里不能直接和redis相连。需要通过相应的扩展驱动才能操作redis。下面,就来介绍下centos环境中安装phpredis扩展驱动的方法。

1、执行如下命令下载扩展包:

wget https://github.com/phpredis/phpredis/archive/2.2.6.tar.gz

2、执行phpize,准备动态安装扩展:

/usr/local/php/bin/phpize

结果如下图所示,表示准备就绪:
3.png

查看全文 >
2014
12-12

PHP性能分析之Xhprof数据说明

之前介绍了《PHP性能分析之Xhprof安装》和《PHP性能分析之Xhprof的使用》,链接如下:

下面来介绍下Xhprof输出的性能数据说明。

Xhprof性能数据界面如下:

7.png

Incl.       表示Including(包含)的缩写
Excl.       表示Excluding(不包含)的缩写
Function Name:      函数名
Calls:              调用次数
Calls%:             调用次数的百分比(图中带有百分比符号的字段皆表示百分比的意思,所以后面不在介绍)
Incl. Wall Time:    包含子函数执行的所有花费时间。单位:微秒(下同)
Excl. Wall Time:    函数本身执行所花费的时间。
Incl. CPU:          包含子函数执行的所花费的CPU时间。
Excl. CPU:          函数本身执行所花费的CPU时间。
Incl.MemUse:        包含子函数执行的所占用的内存。单位:字节(下同)
Excl.MemUse:        函数本身执行所占用的内存。
Incl.PeakMemUse:    包含子函数执行,所占用内存的峰值。
Excl.PeakMemUse:    函数本身执行所占用内存的峰值。
查看全文 >
2014
12-03

PHP性能分析之Xhprof的使用

上一节介绍了《PHP性能分析之Xhprof的安装》(点击查看详情)。
这一节来介绍下Xhprof的具体使用。

Xhprof的使用方式,直接贴示例代码,如下:

//在代码的开头处添加启动“xhprof性能分析器”函数
xhprof_enable(); 

function test(){
    for($i=0; $i<10000; $i++){
        ......
    }
}
test();

//在代码的结束处添加“停止xhprof分析器”函数
$xhprofData = xhprof_disable();

//输出xhprof分析器收集到的性能数据
var_dump($xhprofData);
查看全文 >
2014
12-01

PHP性能分析之Xhprof安装

Xhprof是facebook开源的一个分层PHP性能分析工具。可以收集函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,还可以细分成调用者和被调用者的开销。

下面介绍Xhprof的安装:

1、获取安装包
wget http://pecl.php.net/get/xhprof-0.9.4.tgz

如下图所示:
2.png


2、解压安装包
tar -zxvf xhprof-0.9.4.tgz
cd xhprof-0.9.4
cd extension
查看全文 >
微信扫一扫