Краткая документация Futriix-JSON
Содержание
Futriix JSON
Futriix-json is a C++ Futriix-Модуль,который обеспечивает встроенную поддержку JSON (JavaScript Object Notation) для Futriix. Реализация соответствует стандартам обмена данными RFC7159 и ECMA-404 JSON. Пользователи могут хранить, запрашивать и изменять структуры данных JSON с помощью языка запросов JSONPath. Выражения запроса поддерживают расширенные возможности, включая выбор с подстановочными знаками, выражения фильтров, срезы массива, операции объединения и рекурсивный поиск. Futriix-json использует RapidJSON, высокопроизводительный JSON-парсер и генератор для C++, выбранный за его компактность и исключительную производительность и эффективность памяти. Будучи библиотекой только для заголовков без внешних зависимостей, RapidJSON обеспечивает надежную поддержку Unicode, сохраняя при этом компактный профиль памяти всего 16 байт на значение JSON на большинстве 32/64-разрядных машин.
Компиляция
Компиляция модуля и запуск тестов
# Компилирет futriix-server (нестабильную-ветку) и запускает интеграционные тесты
./build.sh
По умолчанию версия futriix является "нестабильной". Для того чтобы изменить ветку выполните команду:
# Компилирет futriix-server () и запускает интеграционные тесты
SERVER_VERSION=8.0 ./build.sh
Пользовательские флаги компилятора могут быть переданы в скрипт сборки через переменную окружения CFLAGS. Например:
CFLAGS="-O0 -Wno-unused-function" ./build.sh
Сборка модуля с помощью ASAN
export ASAN_BUILD=true
./build.sh
Чтобы собрать только модуль
mkdir build
cd build
cmake ..
make
Версия futriix по умолчанию — «нестабильная». Чтобы переопределить его, выполните следующие действия:
mkdir build
cd build
cmake .. -DVALKEY_VERSION=8.0
make
Пользовательские флаги компилятора могут быть переданы в cmake через переменную CFLAGS. Например:
mkdir build
cd build
cmake .. -DCFLAGS="-O0 -Wno-unused-function"
make
Запуск всех Юнит-тестов:
cd build
make -j unit
Запуск всех интеграционных тестов:
make -j test
Запуск одного интеграционного теста:
TEST_PATTERN=<test-function-or-file> make -j test
e.g.,
TEST_PATTERN=test_sanity make -j test
TEST_PATTERN=test_rdb.py make -j test
Загрузка модуля
Чтобы протестировать модуль с помощью Futriix, вы можете загрузить модуль любым из следующих способов:
С ипользованием файла конфигурации futriix.conf:
1. Добавьте следующее строки в файл конфигураии futriix.conf:
loadmodule /path/to/libjson.so
2. Запускаем futriix-сервер:
futriix-server /path/to/futriix.conf
Запуск Futriix с помощью опции --loadmodule option:
futriix-server --loadmodule /path/to/libjson.so
Использование команды Futriix MODULE LOAD:
1. Connect to a running Valkey instance using valkey-cli
2. Execute Valkey command:
MODULE LOAD /path/to/libjson.so
Использование
Первая команда JSON, которую следует попробовать, — это JSON. SET, который задает ключ Futriix со значением JSON. JSON. SET принимает все типы значений JSON. В этом примере создается строка JSON:
> JSON.SET bike $ '"Hyperion"'
OK
> JSON.GET bike $
"[\"Hyperion\"]"
> JSON.TYPE bike $
1) "string"
Обратите внимание, что команды включают символ доллара $. Это путь к значению в документе JSON (в данном случае это просто корень). Вот еще несколько строковых операций. JSON. STRLEN сообщает вам длину строки, и вы можете добавить к ней еще одну строку с помощью JSON. STRAPPEND.
> JSON.STRLEN bike $
1) (integer) 8
> JSON.STRAPPEND bike $ '" (Enduro bikes)"'
1) (integer) 23
> JSON.GET bike $
"[\"Hyperion (Enduro bikes)\"]"
Числа можно увеличивать и умножать:
> JSON.SET crashes $ 0
OK
> JSON.NUMINCRBY crashes $ 1
"[1]"
> JSON.NUMINCRBY crashes $ 1.5
"[2.5]"
> JSON.NUMINCRBY crashes $ -0.75
"[1.75]"
> JSON.NUMMULTBY crashes $ 24
"[42]"
Вот более интересный пример, который включает массивы и объекты JSON:
> JSON.SET newbike $ '["Deimos", {"crashes": 0}, null]'
OK
> JSON.GET newbike $
"[[\"Deimos\",{\"crashes\":0},null]]"
> JSON.GET newbike $[1].crashes
"[0]"
> JSON.DEL newbike $[-1]
(integer) 1
> JSON.GET newbike $
"[[\"Deimos\",{\"crashes\":0}]]"
Команда JSON.DEL удаляет любое значение JSON которое вы указываете с помощью параметра path.
Вы можете манипулировать массивами с помощью выделенного подмножества команд JSON:
> JSON.SET riders $ []
OK
> JSON.ARRAPPEND riders $ '"Norem"'
1) (integer) 1
> JSON.GET riders $
"[[\"Norem\"]]"
> JSON.ARRINSERT riders $ 1 '"Prickett"' '"Royce"' '"Castilla"'
1) (integer) 4
> JSON.GET riders $
"[[\"Norem\",\"Prickett\",\"Royce\",\"Castilla\"]]"
> JSON.ARRTRIM riders $ 1 1
1) (integer) 1
> JSON.GET riders $
"[[\"Prickett\"]]"
> JSON.ARRPOP riders $
1) "\"Prickett\""
> JSON.ARRPOP riders $
1) (nil)
JSON объекты также имеют свои собственные команды:
> JSON.SET bike:1 $ '{"model": "Deimos", "brand": "Ergonom", "price": 4972}'
OK
> JSON.OBJLEN bike:1 $
1) (integer) 3
> JSON.OBJKEYS bike:1 $
1) 1) "model"
2) "brand"
3) "price"
Ключи
$ futriix-cli --raw
> JSON.GET obj INDENT "\t" NEWLINE "\n" SPACE " " $
[
{
"name": "Leonard Cohen",
"lastSeen": 1478476800,
"loggedOut": true
}
]
Ограничения
Значение JSON, передаваемое команде, может иметь глубину до 128. Если передать команде значение JSON, содержащее объект или массив с уровнем вложенности больше 128, команда вернет ошибку.
Команды
JSON.ARRAPPEND
JSON.ARRINDEX
JSON.ARRINSERT
JSON.ARRLEN
JSON.ARRPOP
JSON.ARRTRIM
JSON.CLEAR
JSON.DEBUG
JSON.DEL
JSON.FORGET
JSON.GET
JSON.MGET
JSON.MSET (#16)
JSON.NUMINCRBY
JSON.NUMMULTBY
JSON.OBJLEN
JSON.OBJKEYS
JSON.RESP
JSON.SET
JSON.STRAPPEND
JSON.STRLEN
JSON.TOGGLE
JSON.TYPE