futriix-json/README.md
Григорий Сафронов 476c87cbdc
Some checks are pending
CI / build-ubuntu-latest (8.0) (push) Waiting to run
CI / build-ubuntu-latest (unstable) (push) Waiting to run
CI / build-asan-ubuntu-latest (8.0) (push) Waiting to run
CI / build-asan-ubuntu-latest (unstable) (push) Waiting to run
Update README.md
2025-03-22 19:59:32 +00:00

8.6 KiB
Raw Permalink Blame History

Краткая документация Futriix-JSON



Содержание
  1. О проекте
  2. Компиляция
  3. Использование
  4. Ограничения
  5. Команды
  6. Ключи

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