1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/0xsky-xhttpcache

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_cn.md 9.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 16.03.2025 02:10 07762e1

Что такое xhttpcache?

xhttpcache — это служба высокоскоростного кэширования данных HTTP и также может использоваться как NoSQL база данных K-V.

Поддерживает протокол Redis и REST-интерфейсы на основе протокола HTTP.

Какие функции имеет xhttpcache?

  • Предоставляет услуги кэширования данных HTTP, поддерживает хранение двоичных данных;
  • Полностью реализует K-V хранилище, поддерживает долговременное хранение данных (ROCKSDB);
  • Поддерживает механизм истечения срока действия данных, обеспечивая миллисекундную точность;
  • Реализует полный набор команд протокола Redis, поддерживающий команды SET/GET/DEL/EXPIRE/TTL;
  • Реализует интерфейсы протоколов HTTP/HTTPS, позволяющие использовать REST-команды для доступа к данным;
  • Реализует протоколы кэширования HTTP, поддерживающие eTag, 304 Not Modified и gzip-сжатие передаваемых данных;
  • Включает веб-редактор, который позволяет добавлять/изменять/удалять данные непосредственно через браузер.

Графическое представление xhttpcache

xhttpcache

Компиляция и установка

Для компиляции необходимы следующие зависимости: Необходимо предварительно скомпилировать и установить: rocksdb libevhtp libsnappy libjemalloc

wget --no-check-certificate https://github.com/0xsky/xhttpcache/archive/master.zip
unzip master
cd xhttpcache-master
make
```## Пример использования:
xhttpcache был спроектирован как сервер ускорения данных HTTP: данные, записанные через предоставленные интерфейсы записи, могут быть немедленно доступны через браузер.
Также предоставляет интерфейсы протокола Redis, что позволяет читать и писать данные с помощью клиентов Redis (поддерживающих различные языки программирования), делая его простой NoSQL базой данных.
Ключевые значения, созданные через интерфейсы Redis, могут быть немедленно доступны через интерфейсы HTTP в браузере.

#### Доступ через HTTP-интерфейс:
У службы xhttpcache есть два порта HTTP-сервера, которые можно настроить в конфигурационном файле;
`httpd_frontend_port` — открытый порт для чтения запросов;
`httpd_backend_port` — порт для операций с данными, поддерживающий все REST-запросы (get/post/put/delete);
Доступ к данным через порт backend можно защитить паролем пользователя.    
curl -d "testdata" http://admin:admin123@127.0.0.1:9090/testkey
Отправка данных в формате kv с помощью POST запроса на xhttpcache: testkey -- testdata

curl http://127.0.0.1:8080/testkey
Получение данных по ключу testkey с помощью GET запроса
Доступ через передний порт без необходимости аутентификации, хотя можно также использовать обратный порт с указанием пароля:
curl http://admin:admin123@127.0.0.1:9090/testkey
Эти два метода получения данных с помощью GET запроса дают одинаковый результат.    curl -I -X DELETE http://admin:admin123@127.0.0.1:9090/testkey
    Удаление ключа testkey с помощью HTTP DELETE запроса

    Ниже приведены команды для загрузки локального файла на xhttpcache
    curl -F file=@/tmp/me.txt http://admin:admin123@127.0.0.1:9090/test.jpg

#### Пример использования команд Redis: Приведенный ниже пример демонстрирует все поддерживаемые команды REDIS.
```bash
    [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>

Добавление файла изображения в xhttpcache с помощью команд REDIS:

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

Батч-внедрение и экспортирование данных

Следующий скрипт позволяет массово внедрять файлы с диска в xhttpcache. Этот скрипт импортирует все файлы из указанной директории в 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

Следующий shell-скрипт позволяет экспортировать данные из xhttpcache в виде файловой системы на диск.

#!/bin/sh
# 
# Скрипт экспорта данных xHttpCache
# Автор: xSky
```usage()
{
    echo "++++++++++++++++++++++++++++++++++++++++++++++++++++" 
    echo "+ Скрипт экспорта данных xHttpCache от xSky           +" 
    echo "+ Использование:                                      +" 
    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 "[ОШИБКА] Директория $data_dir не существует"
    exit 0
fi
``` ``` ```

## Характеристики:
xhttpcache выполняет типизацию URI, доступных через HTTP, возвращает соответствующий тип контента (Content-Type) на основе расширения файла,
что позволяет интерфейсу HTTP xhttpcache работать как настоящий веб-сервер.
При просмотре данных через браузер они отображаются в виде страниц, а не просто как данные.
Например, для адреса /test.htm при возврате содержимого http-заголовок будет содержать: Content-Type: text/html;
таким образом, при прямом доступе к test.htm через браузер, данные будут отображаться в формате HTML.
Для ключей типа /test.jpg, если значение представляет собой данные JPG-изображения, то при доступе через браузер к /test.jpg, изображение будет отображено корректно;
к тому же, поддерживаются функции просмотра и загрузки изображений.
На основании этих особенностей можно легко загружать все файлы статического сайта в кэш, полностью используя память.## Благодарность
Благодарю следующие проекты, порядок нумерации случайный:

* [libevent](http://libevent.org/)
* [libevhtp](https://github.com/ellzey/libevhtp)
* [RocksDB](http://rocksdb.org/)
* [SSDB](http://ssdb.io/)

## О создателе
* [Главная страница xhttpcache](http://xhttpcache.0xsky.com/)
* [Блог xSky](http://www.0xsky.com/)
* Группа QQ xhttpcache: 195957781

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/0xsky-xhttpcache.git
git@api.gitlife.ru:oschina-mirror/0xsky-xhttpcache.git
oschina-mirror
0xsky-xhttpcache
0xsky-xhttpcache
master