All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.redis.om.spring.ops.json.JSONOperationsImpl Maven / Gradle / Ivy

package com.redis.om.spring.ops.json;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.redis.om.spring.client.RedisModulesClient;
import com.redis.om.spring.ops.Command;
import com.redislabs.modules.rejson.JReJSON.ExistenceModifier;
import com.redislabs.modules.rejson.Path;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Protocol;
import redis.clients.jedis.util.SafeEncoder;

public class JSONOperationsImpl implements JSONOperations {

  RedisModulesClient client;

  public JSONOperationsImpl(RedisModulesClient client) {
    this.client = client;
  }

  @Override
  public Long del(K key, Path path) {
    return client.clientForJSON().del(key.toString(), path);
  }

  @Override
  public  T get(K key) {
    return client.clientForJSON().get(key.toString());
  }

  @Override
  public  T get(K key, Class clazz, Path... paths) {
    return client.clientForJSON().get(key.toString(), clazz, paths);
  }

  @Override
  public  List mget(Class clazz, @SuppressWarnings("unchecked") K... keys) {
    String[] keysAsStrings = Arrays.asList(keys).stream().map(Object::toString).toArray(String[]::new);
    return client.clientForJSON().mget(clazz, keysAsStrings);
  }

  @Override
  public  List mget(Path path, Class clazz, @SuppressWarnings("unchecked") K... keys) {
    String[] keysAsStrings = Arrays.asList(keys).stream().map(Object::toString).toArray(String[]::new);
    return client.clientForJSON().mget(path, clazz, keysAsStrings);
  }

  @Override
  public void set(K key, Object object, ExistenceModifier flag) {
    client.clientForJSON().set(key.toString(), object, flag);
  }

  @Override
  public void set(K key, Object object) {
    client.clientForJSON().set(key.toString(), object);
  }

  @Override
  public void set(K key, Object object, Path path) {
    client.clientForJSON().set(key.toString(), object, path);
  }

  @Override
  public void set(K key, Object object, ExistenceModifier flag, Path path) {
    client.clientForJSON().set(key.toString(), object, flag, path);
  }

  @Override
  public Class type(K key) {
    return client.clientForJSON().type(key.toString());
  }

  @Override
  public Class type(K key, Path path) {
    return client.clientForJSON().type(key.toString(), path);
  }

  @Override
  public Long strAppend(K key, Path path, Object... objects) {
    return client.clientForJSON().strAppend(key.toString(), path, objects);
  }

  @Override
  public Long strLen(K key, Path path) {
    return client.clientForJSON().strLen(key.toString(), path);
  }

  @Override
  public Long arrAppend(K key, Path path, Object... objects) {
    return client.clientForJSON().arrAppend(key.toString(), path, objects);
  }

  @Override
  public Long arrIndex(K key, Path path, Object scalar) {
    return client.clientForJSON().arrIndex(key.toString(), path, scalar);
  }

  @Override
  public Long arrInsert(K key, Path path, Long index, Object... objects) {
    return client.clientForJSON().arrInsert(key.toString(), path, index, objects);
  }

  @Override
  public Long arrLen(K key, Path path) {
    return client.clientForJSON().arrLen(key.toString(), path);
  }

  @Override
  public  T arrPop(K key, Class clazz, Path path, Long index) {
    return client.clientForJSON().arrPop(key.toString(), clazz, path, index);
  }

  @Override
  public  T arrPop(K key, Class clazz, Path path) {
    return client.clientForJSON().arrPop(key.toString(), clazz, path);
  }

  @Override
  public  T arrPop(K key, Class clazz) {
    return client.clientForJSON().arrPop(key.toString(), clazz);
  }

  @Override
  public Long arrTrim(K key, Path path, Long start, Long stop) {
    return client.clientForJSON().arrTrim(key.toString(), path, start, stop);
  }

  @Override
  public void toggle(K key, Path path) {
    client.clientForJSON().toggle(key.toString(), path);
  }

  // https://redis.io/commands/json.numincrby/
  @Override
  public Long numIncrBy(K key, Path path, Long value) {
    List args = new ArrayList<>();
    args.add(SafeEncoder.encode(key.toString()));
    args.add(SafeEncoder.encode(path != null ? path.toString() : Path.ROOT_PATH.toString()));
    args.add(Protocol.toByteArray(value));

    Long results = -1L;
    try (Jedis conn = client.getJedis()) {
      conn.getClient().sendCommand(Command.JSON_NUMINCRBY, args.toArray(new byte[args.size()][]));
      results = Long.parseLong(conn.getClient().getBulkReply());
    }

    return results;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy