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

com.redis.spring.batch.util.ConnectionUtils Maven / Gradle / Ivy

The newest version!
package com.redis.spring.batch.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.function.Supplier;

import org.springframework.util.FileCopyUtils;

import com.redis.lettucemod.RedisModulesClient;
import com.redis.lettucemod.api.StatefulRedisModulesConnection;
import com.redis.lettucemod.cluster.RedisModulesClusterClient;
import com.redis.lettucemod.cluster.api.StatefulRedisModulesClusterConnection;

import io.lettuce.core.AbstractRedisClient;
import io.lettuce.core.ReadFrom;
import io.lettuce.core.api.StatefulConnection;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisScriptingCommands;
import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;
import io.lettuce.core.codec.RedisCodec;

public abstract class ConnectionUtils {

	private ConnectionUtils() {
	}

	public static Supplier> supplier(AbstractRedisClient client) {
		return supplier(client, CodecUtils.STRING_CODEC);
	}

	public static Supplier> supplier(AbstractRedisClient client, ReadFrom readFrom) {
		return supplier(client, CodecUtils.STRING_CODEC, readFrom);
	}

	public static  Supplier> supplier(AbstractRedisClient client,
			RedisCodec codec) {
		return supplier(client, codec, null);
	}

	public static  Supplier> supplier(AbstractRedisClient client, RedisCodec codec,
			ReadFrom readFrom) {
		if (client instanceof RedisModulesClusterClient) {
			return () -> connection((RedisModulesClusterClient) client, codec, readFrom);
		}
		return () -> connection((RedisModulesClient) client, codec);
	}

	public static  StatefulRedisModulesConnection connection(AbstractRedisClient client,
			RedisCodec codec, ReadFrom readFrom) {
		if (client instanceof RedisModulesClusterClient) {
			return connection((RedisModulesClusterClient) client, codec, readFrom);
		}
		return connection((RedisModulesClient) client, codec);
	}

	public static  StatefulRedisModulesConnection connection(RedisModulesClient client,
			RedisCodec codec) {
		return client.connect(codec);
	}

	public static  StatefulRedisModulesConnection connection(RedisModulesClusterClient client,
			RedisCodec codec, ReadFrom readFrom) {
		StatefulRedisModulesClusterConnection connection = client.connect(codec);
		if (readFrom != null) {
			connection.setReadFrom(readFrom);
		}
		return connection;
	}

	@SuppressWarnings("unchecked")
	public static  T sync(StatefulConnection connection) {
		if (connection instanceof StatefulRedisClusterConnection) {
			return (T) ((StatefulRedisClusterConnection) connection).sync();
		}
		return (T) ((StatefulRedisConnection) connection).sync();
	}

	@SuppressWarnings("unchecked")
	public static  T async(StatefulConnection connection) {
		if (connection instanceof StatefulRedisClusterConnection) {
			return (T) ((StatefulRedisClusterConnection) connection).async();
		}
		return (T) ((StatefulRedisConnection) connection).async();
	}

	@SuppressWarnings("unchecked")
	public static String loadScript(AbstractRedisClient client, String filename) throws IOException {
		byte[] bytes;
		try (InputStream inputStream = ConnectionUtils.class.getClassLoader().getResourceAsStream(filename)) {
			bytes = FileCopyUtils.copyToByteArray(inputStream);
		}
		try (StatefulConnection connection = supplier(client, CodecUtils.STRING_CODEC).get()) {
			return ((RedisScriptingCommands) sync(connection)).scriptLoad(bytes);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy