xhttpcache — это служба высокоскоростного кэширования данных HTTP и также может использоваться как NoSQL база данных K-V.
Поддерживает протокол Redis и REST-интерфейсы на основе протокола HTTP.
Для компиляции необходимы следующие зависимости: Необходимо предварительно скомпилировать и установить: 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 )