标签 nosql 下的文章

2015
05-19

centos安装mongodb扩展

PHP程序要正常操作mongodb库,必须要先安装好mongodb扩展。下面就来介绍mongodb扩展的安装方法。

基础环境

  • centos7.2+
  • php7+
  • mongodb3.4+

1、下载mongo扩展包

wget http://pecl.php.net/get/mongodb-1.2.9.tgz

2、重命名并解压

下载成功后,执行如下命令:

# 解压
tar -zxvf mongodb-1.2.9.tgz
cd mongodb-1.2.9

3、编译安装

通过phpize来动态添加mongo扩展,

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

4、编辑php.ini

编译成功之后,需要将编译好的mongodb.so添加到php.ini配置文件当中。在php.ini的文件末尾添加如下配置:

extension=mongodb.so

重启nginx和php-fpm后,通过如下命令,

php -m

看到“mongodb”字样存在,即表示扩展安装成功。在PHP程序中就能正常mongodb了。

查看全文 >
2015
05-13

剖析Redis持久化之RDB方式

最近在阅读《Redis设计与实现》这本书,书中关于Redis的实现原理,做了相对详细的介绍与说明。
Marser整理了Redis持久化之RDB方式的原理、redis.conf配置方式、数据还原操作及RDB方式的特点。下面Marser就来做详细的介绍。

1、RDB持久化原理

RDB持久化既可以通过命令行手动执行,也可以通过redis.conf配置选项定期执行,该功能可以将某个时间点上的数据库中的键值对保存到一个rdb文件中,默认为dump.rdb。

2、RDB持久化命令

Redis中有两个命令可以用于生成RDB文件,一个是save,另一个是bgsave。这两个命令都可以通过命令行来手动执行。下面分别来介绍下这两个命令。

  save命令

执行save命令时,Redis服务器主进程会执行保存工作,所以save命令会阻塞Redis服务器进程。在Redis服务器进程阻塞期间,服务器不能处理任何从客户端发送过来的命令请求,直至RDB文件创建完毕。即save命令是做同步操作
此种方式

  bgsave命令

bgsave命令和save命令不同,在执行bgsave命令时,Redis服务器会派生出一个子进程,由这个子进程来负责执行数据保存工作,并创建RDB文件,而Redis服务器进程(父进程)则继续处理从客户端发送过来的命令请求。即bgsave命令是做异步操作

查看全文 >
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),并不能高效地处理大量时间事件。要让服务器创建大量的定时器,从而实现定时删除,在现阶段来说并不现实。

查看全文 >
微信扫一扫