xhttpcache 是一个 HTTP 高速数据缓存服务器

Xhttpcache is a HTTP static cache service, which is also NOSQL database as K-V storage supporting REDIS protocol interface as well as REST interface of HTTP protocol.

What are the functions of Xhttpcache?

  • Provision of caching services for HTTP data and support for binary data storage;
  • Realization of full K-V storage and permanent data storage (ROCKSDB);
  • Support for data timeout mechanism with Millisecond accuracy;
  • Implementation of the complete REDIS protocol interface with the SET/GET/DEL/EXIRE/TTL order for redis;
  • Implementation of the HTTP/HTTPS protocol interface as well as access via REST command;
  • Implementation of HTTP cache related protocol in support of eTage ,304 Not Modified and gzip compression for transmission content;
  • Data Adjunction/ modification / deletion directly with WEB background editor

Graphic Xhttpcache

《xhttpcache 是一个 HTTP 高速数据缓存服务器》

Compilation and installation

Compiler dependency Library: Need compiling and installing in advance

 

build

wget --no-check-certificate https://github.com/0xsky/xhttpcache/archive/master.zip unzip master.zip cd xhttpcache-master make 

Approaches:

xhttpcache is designed as accelerated server for HTTP data: Data written to the xhttpcache by providing the write interface accessed directly through the browser. Meanwhile, reading and writing through redis` client(support a variety of languages) with the help of a redis protocol interface, which serves as a simple NOSQL databases; Established K-V data through a REDIS interface offering direct access via the HTTP interface in a browser

The usage of NOSQL database: establish the K-V data through the REDIS interface, visit the database through the HTTP interface in the browser

Access via HTTP interface There are two HTTP service port in xhttpcache configured in the configuration file. Httpd_frontend_port is an open visiting port with read-only requests while Httpd_backend_port is the back-end data ports supporting all the REST reading and writing requests (get/post/put/delete); Back-end data access can be set logining password;

The samples under the redis command:

The following example shows all the supported REDIS commands

    [xsky@localhost xhttpcache]$ redis-cli -p 7379
    127.0.0.1:7379> set test hello 
    OK
    127.0.0.1:7379> get test
    "hello"
    127.0.0.1:7379> set test hello ex 1000
    OK
    127.0.0.1:7379> get test
    "hello"
    127.0.0.1:7379> ttl test
    (integer) 988
    127.0.0.1:7379> EXPIRE test 2000
    (integer) 1
    127.0.0.1:7379> ttl test
    (integer) 1998
    127.0.0.1:7379> get test
    "hello"
    127.0.0.1:7379>

Add image files to xhttpcache via the redis command

redis-cli -p 7379 -x set getheadimg.jpg 
   

Bulk of data imports and exports

Import bulk of disk file to the xhttpcache through the following script leading the files in the directory specified by the parameter into the xhttpcache.

#!/bin/bash

redis_cmd="redis-cli -p 7379 -x set "
function batch_convert() {
    for file in `ls $1`
    do
        if [ -d $1"/"$file ]
        then
            batch_convert $1"/"$file
        else
            key=$1"/"$file       
            #echo 33 $redis_cmd  ${key#*/}   $1"/"$file
            $redis_cmd ${key#*/} < $1"/"$file
        fi
    done
}

batch_convert $1

The data in the xhttpcache can be exported to the disk in the form of a directory file by the following shell script,

#!/bin/sh
# 
# xHttpCache数据备份脚本
# By: xSky

usage()
{
    echo "++++++++++++++++++++++++++++++++++++++++++++++++++++" 
    echo "+ xHttpCache data export shell tools by:xSky       " 
    echo "+ usage:                                           " 
    echo "+ $0 data_dir redis_host redis_port                " 
    echo "++++++++++++++++++++++++++++++++++++++++++++++++++++" 
}

#判断参数
if [ $# -ne 3 ]; then
    usage
    exit 0
fi

data_dir=$1
redis_host=$2
redis_port=$3
echo $data_dir $redis_host $redis_port

if [ -d $data_dir ];then
    #redis-cli -p 6579 scan a z | awk  '{print "redis-cli -p 6579 get "$0 " >"$0}'|sh
    cd $data_dir
    redis-cli -h $redis_host -p $redis_port scan a z | while read line
    do
        echo $line 
        bdir=`expr index $line "/"`
        file_dir=${line%/*}
        file_name=$line

        if [[ $bdir -gt 0 ]];then
            #echo 1 $bdir $file_dir $file_name
            mkdir -p $file_dir
        fi

        redis-cli -h $redis_host -p $redis_port get $line > $line

    done
    cd -
else
    echo [ERROR] the dir $data_dir do not exist
    exit 0
fi

Characteristic description:

Xhttpcache can return the corresponding file suffix Content-Type judging the URI type visited by HTTP, which makes its HTTP interface a real WEB server. When accessed through the browser, the data will be displayed directly in the form of a page instead of the usual data interface. For example: for the address with the /test.htm form. When returning contents, the HTTP head returns: text/html Content-Type, which can be displayed in the form of HTML through the browser directly to the test.htm corresponding data content, For the key in the /test.jpg form, if the value content should be JPG image data, the normal display as a picture appears through the browser to access the /test.jpg. Besides, the background supports the previewing and uploading of the pictures. According to the above characteristics, it can be very easy to load all the static web site files to cache with full memory.

Gratitude

Be grateful of the following items. Ranking regardless.

  • libevent

  • libevhtp

  • rocksdb

  • ssdb

About the author

  • xhttpcache websit

  • xhttpcache QQGroup: 195957781
  • xSky blog

  • Email:

    guozhw@gmail.com

    原文作者:HTTP
    原文地址: https://juejin.im/entry/57e8d5922e958a005449299a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞