设置Git禁用SSL检验:
git config --system http.sslVerify false
更新根证书:
curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
更新OpenSSL:
yum update openssl
发布时间:January 3, 2014 // 分类:Linux基础 // No Comments
设置Git禁用SSL检验:
git config --system http.sslVerify false
更新根证书:
curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
更新OpenSSL:
yum update openssl
发布时间:January 2, 2014 // 分类:NoSQL // No Comments
安装Tokyo Cabinet,后端存储:
yum install gcc zlib-devel bzip2-devel
wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz
tar zxvf tokyocabinet-1.4.48.tar.gz
cd tokyocabinet-1.4.48/
./configure --prefix=/usr/local/tokyocabinet-1.4.48/
make && make install
安装Tokyo Cabinet PHP扩展:
git clone https://github.com/rsky/php-tokyocabinet.git
cd php-tokyocabinet/
phpize
export PKG_CONFIG_PATH=/usr/local/tokyocabinet-1.4.48/lib/pkgconfig/
./configure --enable-tokyocabinet
make && make install
echo "extension=tokyocabinet.so" >> /etc/php.ini
使用:
<?php
$bdb = new TCBDB();
$bdb->open('tc.bdb', TCBDB::OWRITER | TCBDB::OCREAT);
$bdb->put('key', 'value');
echo $bdb->get('key'), "\n";
?>
安装Tokyo Cabinet Lua扩展:
yum install lua-devel
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/tokyocabinet-1.4.48/include/
wget http://fallabs.com/tokyocabinet/luapkg/tokyocabinet-lua-1.10.tar.gz
tar zxvf tokyocabinet-lua-1.10.tar.gz
cd tokyocabinet-lua-1.10
./configure --prefix=/usr/local/tokyocabinet-lua-1.10
make && make install
安装Tokyo Tyrant,网络前端:
wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
tar zxvf tokyotyrant-1.1.41.tar.gz
cd tokyotyrant-1.1.41
./configure --prefix=/usr/local/tokyotyrant-1.1.41/ --enable-lua \
--with-tc=/usr/local/tokyocabinet-1.4.48/
make && make install
cp -r ext/ /etc/ttserver
echo "/usr/local/tokyotyrant-1.1.41/lib/" >> /etc/ld.so.conf.d/tokyo.conf
echo "/usr/local/tokyocabinet-1.4.48/lib" >> /etc/ld.so.conf.d/tokyo.conf
ldconfig
启动Tokyo Tyrant:
ttserver -host 127.0.0.1 -port 1978 -thnum 8 -dmn -pid /tmp/ttserver.pid -log /tmp/ttserver.log -le \
-ulog /tmp/ -ulim 32m -sid 1 -rts /tmp/ttserver.rts -ext /etc/ttserver/queue.lua /tmp/database.tch
Tokyo Tyrant通过tcrdbext.c对Lua提供了API,可使用Lua脚本扩展Tokyo Tyrant服务端功能。
更多:http://fallabs.com/tokyotyrant/spex.html#luaext
安装Tokyo Tyrant PHP扩展:
git clone https://github.com/mkoppanen/php-tokyo_tyrant.git
cd php-tokyo_tyrant/
phpize
./configure --with-tokyo-tyrant=/usr/local/tokyotyrant-1.1.41/ \
--with-tokyo-cabinet-dir=/usr/local/tokyocabinet-1.4.48/
make && make install
echo 'extension=tokyo_tyrant.so' >> /etc/php.ini
测试:
<?php
$tt = new TokyoTyrant("localhost", '1978');
$tt->put("key", "value");
echo $tt->get("key");
for($i=1; $i<=100; $i++)
{
$tt->ext('enqueue','0', 'my_queue', $i );
}
print_r($tt->ext('dequeue', '0','my_queue', 10));
print_r($tt->ext('dequeue', '0','my_queue', 10));
print_r($tt->ext('dequeue', '0','my_queue', 10));
//上面ext方法的第2个参数0,为是否开启锁机制,还有下面两个值可选:
//一个相当于行锁,一个相当于表锁,一般第一个就够用了
//Tyrant::XOLCKREC for record locking
//Tyrant::XOLCKGLB for global locking
?>
使用客户端管理:
tcrmgr put -port 1978 127.0.0.1 key1 value1
tcrmgr ext -port 1978 127.0.0.1 enqueue myqueue value1
curl -X PUT http://192.168.1.3:1978/key1 -d "value1"
curl http://127.0.0.1:1978/key1
发布时间:January 2, 2014 // 分类:NoSQL // No Comments
安装LevelDB:
cd /usr/local/src/
wget http://leveldb.googlecode.com/files/leveldb-1.15.0.tar.gz
tar zxvf leveldb-1.15.0.tar.gz
cd leveldb-1.15.0
make
cp libleveldb.* /usr/local/lib/
cp -r include/leveldb /usr/local/include/
LevelDB提供了一个测试程序:
make db_bench
cp db_bench /usr/local/bin/
db_bench --num=100000000 --write_buffer_size=$((256*1024*1024))
安装PHP扩展,https://github.com/reeze/php-leveldb
git clone https://github.com/reeze/php-leveldb.git
cd php-leveldb/
phpize
./configure
make
make install
echo 'extension=leveldb.so' >> /etc/php.ini
测试下下写入2亿数据用时30分钟,然后读取单个key用时0.02秒左右。
<?php
$start = microtime ( true );
$db = new LevelDB("/tmp/leveldb-test2-db");
for($i=1; $i<=200000000; $i++)
{
$key = sprintf('%012d', $i);
$db->put("queue-$key", "value$i@gmail.com");
}
$end = microtime ( true );
echo "脚本执行时间".($end - $start)."\n";
//$db->get('key');
?>
前端可使用:Kyoto Tycoon
发布时间:January 2, 2014 // 分类:NoSQL // No Comments
安装Berkeley DB:
wget http://download.oracle.com/berkeley-db/db-6.0.20.tar.gz
tar zxvf db-6.0.20.tar.gz
cd db-6.0.20/build_unix/
../dist/configure --prefix=/usr/local/berkeleydb --enable-cxx
make && make install
安装PHP扩展:
cd ../lang/php_db4/
phpize
./configure --with-db4=/usr/local/berkeleydb/
make && make install
echo 'extension=db4.so' >> /etc/php.ini
简单使用:
<?php
$db = new Db4();
$db->open(null, "/var/tmp/db4", "test");
$db->put('key', 'value');
$db->get('key');
?>
http://www.oracle.com/technetwork/products/berkeleydb/downloads/index-082944.html
发布时间:January 1, 2014 // 分类:PHP // No Comments
使用Keep-Alive可减少建立TCP连接的开销,pfsockopen在脚本执行期间可重用socket实现Keep-Alive。
<?php
function httpget($host)
{
$conn = pfsockopen($host,80,$errno, $errstr, 30);
if (!$conn)
{
echo "$errstr ($errno)<br />\n";
return;
}
$header = "HEAD / HTTP/1.1\r\n";
$header.= "Host: {$host}\r\n";
$header.= "Connection: Keep-Alive\r\n\r\n";
fwrite($conn,$header);
/*
while (!feof($conn)) {
$resp .= fgets($conn);
}
*/
//fclose($conn); //关闭连接后再连接keepalive失效
return $resp;
}
$host = 'www.haiyun.me';
$count = 2;
for ($i = 0; $i < $count; $i++) {
echo httpget($host);
sleep(10);
}
?>
Tcpdump分析,1-3行第一次建立TCP连接,第8行建立第二次连接跳过TCP三次握手。
20:27:17.016435 IP 1.2.3.4.49022 > 162.211.225.71.80: Flags [S], seq 2231661196, win 5840, options [mss 1400,sackOK,TS val 9961058 ecr 0,nop,wscale 6], length 0
20:27:17.016531 IP 162.211.225.71.80 > 1.2.3.4.49022: Flags [S.], seq 2734092091, ack 2231661197, win 14480, options [mss 1460,sackOK,TS val 1880475065 ecr 9961058,nop,wscale 7], length 0
20:27:17.342653 IP 1.2.3.4.49022 > 162.211.225.71.80: Flags [.], ack 1, win 92, options [nop,nop,TS val 9961139 ecr 1880475065], length 0
20:27:17.345695 IP 1.2.3.4.49022 > 162.211.225.71.80: Flags [P.], seq 1:65, ack 1, win 92, options [nop,nop,TS val 9961139 ecr 1880475065], length 64
20:27:17.345716 IP 162.211.225.71.80 > 1.2.3.4.49022: Flags [.], ack 65, win 114, options [nop,nop,TS val 1880475394 ecr 9961139], length 0
20:27:17.876911 IP 162.211.225.71.80 > 1.2.3.4.49022: Flags [P.], seq 1:427, ack 65, win 114, options [nop,nop,TS val 1880475925 ecr 9961139], length 426
20:27:18.202503 IP 1.2.3.4.49022 > 162.211.225.71.80: Flags [.], ack 427, win 108, options [nop,nop,TS val 9961355 ecr 1880475925], length 0
20:27:27.346477 IP 1.2.3.4.49022 > 162.211.225.71.80: Flags [P.], seq 65:129, ack 427, win 108, options [nop,nop,TS val 9963640 ecr 1880475925], length 64
20:27:27.346508 IP 162.211.225.71.80 > 1.2.3.4.49022: Flags [.], ack 129, win 114, options [nop,nop,TS val 1880485395 ecr 9963640], length 0
20:27:27.838571 IP 162.211.225.71.80 > 1.2.3.4.49022: Flags [P.], seq 427:853, ack 129, win 114, options [nop,nop,TS val 1880485887 ecr 9963640], length 426
20:27:28.165367 IP 1.2.3.4.49022 > 162.211.225.71.80: Flags [.], ack 853, win 125, options [nop,nop,TS val 9963845 ecr 1880485887], length 0
20:27:37.346030 IP 1.2.3.4.49022 > 162.211.225.71.80: Flags [R.], seq 129, ack 853, win 125, options [nop,nop,TS val 9966140 ecr 1880485887], length 0