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

io.github.bucket4j.redis.redisson.Bucket4jRedisson Maven / Gradle / Ivy

The newest version!
/*-
 * ========================LICENSE_START=================================
 * Bucket4j
 * %%
 * Copyright (C) 2015 - 2024 Vladimir Bukhtoyarov
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * =========================LICENSE_END==================================
 */
package io.github.bucket4j.redis.redisson;

import java.util.Objects;

import org.redisson.command.CommandAsyncExecutor;

import io.github.bucket4j.distributed.proxy.AbstractProxyManagerBuilder;
import io.github.bucket4j.distributed.serialization.Mapper;
import io.github.bucket4j.redis.redisson.cas.RedissonBasedProxyManager;

/**
 * Entry point for Jedis integration
 */
public class Bucket4jRedisson {

    /**
     * Returns the builder for {@link RedissonBasedProxyManager}
     *
     * @param commandExecutor
     *
     * @return new instance of {@link RedissonBasedProxyManagerBuilder}
     */
    public static RedissonBasedProxyManagerBuilder casBasedBuilder(CommandAsyncExecutor commandExecutor) {
        return new RedissonBasedProxyManagerBuilder<>(Mapper.STRING, commandExecutor);
    }

    public static class RedissonBasedProxyManagerBuilder extends AbstractProxyManagerBuilder, RedissonBasedProxyManagerBuilder> {

        private final CommandAsyncExecutor commandExecutor;
        private Mapper keyMapper;

        public RedissonBasedProxyManagerBuilder(Mapper keyMapper, CommandAsyncExecutor commandExecutor) {
            this.commandExecutor = Objects.requireNonNull(commandExecutor);
            this.keyMapper = Objects.requireNonNull(keyMapper);
        }

        /**
         * Specifies the type of key.
         *
         * @param keyMapper object responsible for converting primary keys to byte arrays.
         *
         * @return this builder instance
         */
        public  RedissonBasedProxyManagerBuilder keyMapper(Mapper keyMapper) {
            this.keyMapper = (Mapper) Objects.requireNonNull(keyMapper);
            return (RedissonBasedProxyManagerBuilder) this;
        }

        public Mapper getKeyMapper() {
            return keyMapper;
        }

        public CommandAsyncExecutor getCommandExecutor() {
            return commandExecutor;
        }

        @Override
        public RedissonBasedProxyManager build() {
            return new RedissonBasedProxyManager<>(this);
        }

        @Override
        public boolean isExpireAfterWriteSupported() {
            return true;
        }

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy