Search in sources :

Example 31 with Codec

use of org.redisson.client.codec.Codec in project redisson by redisson.

the class PublishSubscribeService method reattachPubSub.

public void reattachPubSub(int slot) {
    name2PubSubConnection.entrySet().stream().filter(e -> connectionManager.calcSlot(e.getKey().getChannelName().getName()) == slot).forEach(entry -> {
        PubSubConnectionEntry pubSubEntry = entry.getValue();
        MasterSlaveEntry ee = entry.getKey().getEntry();
        Codec codec = pubSubEntry.getConnection().getChannels().get(entry.getKey().getChannelName());
        if (codec != null) {
            Queue<RedisPubSubListener<?>> listeners = pubSubEntry.getListeners(entry.getKey().getChannelName());
            unsubscribe(entry.getKey().getChannelName(), ee, PubSubType.UNSUBSCRIBE);
            subscribe(codec, entry.getKey().getChannelName(), listeners.toArray(new RedisPubSubListener[0]));
        }
        Codec patternCodec = pubSubEntry.getConnection().getPatternChannels().get(entry.getKey().getChannelName());
        if (patternCodec != null) {
            Queue<RedisPubSubListener<?>> listeners = pubSubEntry.getListeners(entry.getKey().getChannelName());
            unsubscribe(entry.getKey().getChannelName(), ee, PubSubType.PUNSUBSCRIBE);
            psubscribe(entry.getKey().getChannelName(), patternCodec, listeners.toArray(new RedisPubSubListener[0]));
        }
    });
}
Also used : PubSubType(org.redisson.client.protocol.pubsub.PubSubType) Timeout(io.netty.util.Timeout) PubSubStatusMessage(org.redisson.client.protocol.pubsub.PubSubStatusMessage) java.util(java.util) Logger(org.slf4j.Logger) Codec(org.redisson.client.codec.Codec) ConnectionManager(org.redisson.connection.ConnectionManager) java.util.concurrent(java.util.concurrent) org.redisson.client(org.redisson.client) PubSubPatternStatusListener(org.redisson.PubSubPatternStatusListener) LoggerFactory(org.slf4j.LoggerFactory) MasterSlaveServersConfig(org.redisson.config.MasterSlaveServersConfig) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Collectors(java.util.stream.Collectors) ChannelFuture(io.netty.channel.ChannelFuture) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ChannelFutureListener(io.netty.channel.ChannelFutureListener) MasterSlaveEntry(org.redisson.connection.MasterSlaveEntry) Codec(org.redisson.client.codec.Codec) MasterSlaveEntry(org.redisson.connection.MasterSlaveEntry)

Example 32 with Codec

use of org.redisson.client.codec.Codec in project redisson by redisson.

the class PublishSubscribeService method connect.

private CompletableFuture<RedisPubSubConnection> connect(Codec codec, ChannelName channelName, MasterSlaveEntry msEntry, CompletableFuture<PubSubConnectionEntry> promise, PubSubType type, AsyncSemaphore lock, RedisPubSubListener<?>... listeners) {
    CompletableFuture<RedisPubSubConnection> connFuture = nextPubSubConnection(msEntry, channelName);
    promise.whenComplete((res, e) -> {
        if (e != null) {
            connFuture.completeExceptionally(e);
        }
    });
    connFuture.whenComplete((conn, ex) -> {
        if (ex != null) {
            // freePubSubLock.release();
            lock.release();
            if (!connFuture.isCancelled()) {
                promise.completeExceptionally(ex);
            }
            return;
        }
        freePubSubLock.acquire(() -> {
            PubSubConnectionEntry entry = new PubSubConnectionEntry(conn, config.getSubscriptionsPerConnection());
            int remainFreeAmount = entry.tryAcquire();
            PubSubKey key = new PubSubKey(channelName, msEntry);
            PubSubConnectionEntry oldEntry = name2PubSubConnection.putIfAbsent(key, entry);
            if (oldEntry != null) {
                msEntry.returnPubSubConnection(conn);
                freePubSubLock.release();
                addListeners(channelName, promise, type, lock, oldEntry, listeners);
                return;
            }
            if (remainFreeAmount > 0) {
                addFreeConnectionEntry(channelName, entry);
            }
            freePubSubLock.release();
            addListeners(channelName, promise, type, lock, entry, listeners);
            ChannelFuture future;
            if (PubSubType.PSUBSCRIBE == type) {
                future = entry.psubscribe(codec, channelName);
            } else {
                future = entry.subscribe(codec, channelName);
            }
            future.addListener((ChannelFutureListener) future1 -> {
                if (!future1.isSuccess()) {
                    if (!promise.isDone()) {
                        promise.cancel(false);
                    }
                    return;
                }
                connectionManager.newTimeout(timeout -> promise.cancel(false), config.getTimeout(), TimeUnit.MILLISECONDS);
            });
        });
    });
    return connFuture;
}
Also used : ChannelFuture(io.netty.channel.ChannelFuture) PubSubType(org.redisson.client.protocol.pubsub.PubSubType) Timeout(io.netty.util.Timeout) PubSubStatusMessage(org.redisson.client.protocol.pubsub.PubSubStatusMessage) java.util(java.util) Logger(org.slf4j.Logger) Codec(org.redisson.client.codec.Codec) ConnectionManager(org.redisson.connection.ConnectionManager) java.util.concurrent(java.util.concurrent) org.redisson.client(org.redisson.client) PubSubPatternStatusListener(org.redisson.PubSubPatternStatusListener) LoggerFactory(org.slf4j.LoggerFactory) MasterSlaveServersConfig(org.redisson.config.MasterSlaveServersConfig) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Collectors(java.util.stream.Collectors) ChannelFuture(io.netty.channel.ChannelFuture) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ChannelFutureListener(io.netty.channel.ChannelFutureListener) MasterSlaveEntry(org.redisson.connection.MasterSlaveEntry)

Example 33 with Codec

use of org.redisson.client.codec.Codec in project redisson by redisson.

the class RedissonLocalCachedMapTest method testReadAllValues2.

@Test
public void testReadAllValues2() {
    ObjectMapper objectMapper = new JsonJacksonCodec().getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Codec codec = new TypedJsonJacksonCodec(String.class, SimpleValue.class, objectMapper);
    RLocalCachedMap<String, SimpleValue> map1 = redisson.getLocalCachedMap("test", codec, LocalCachedMapOptions.defaults());
    RLocalCachedMap<String, SimpleValue> map2 = redisson.getLocalCachedMap("test", codec, LocalCachedMapOptions.defaults());
    map1.put("key", new SimpleValue("3"));
    Collection<SimpleValue> s = map1.readAllValues();
    assertThat(s).hasSize(1);
    Collection<SimpleValue> s2 = map2.readAllValues();
    assertThat(s2).hasSize(1);
}
Also used : Codec(org.redisson.client.codec.Codec) StringCodec(org.redisson.client.codec.StringCodec) JsonJacksonCodec(org.redisson.codec.JsonJacksonCodec) CompositeCodec(org.redisson.codec.CompositeCodec) IntegerCodec(org.redisson.client.codec.IntegerCodec) DoubleCodec(org.redisson.client.codec.DoubleCodec) TypedJsonJacksonCodec(org.redisson.codec.TypedJsonJacksonCodec) JsonJacksonCodec(org.redisson.codec.JsonJacksonCodec) TypedJsonJacksonCodec(org.redisson.codec.TypedJsonJacksonCodec) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) TypedJsonJacksonCodec(org.redisson.codec.TypedJsonJacksonCodec) Test(org.junit.jupiter.api.Test)

Example 34 with Codec

use of org.redisson.client.codec.Codec in project killbill by killbill.

the class RedissonCacheClientProvider method get.

@Override
public RedissonClient get() {
    // JDK serialization codec for now, but we can do better in speed and space
    final Codec codec = new SerializationCodec();
    final Config redissonCfg = new Config();
    redissonCfg.setCodec(codec).useSingleServer().setAddress(address).setPassword(password).setConnectionMinimumIdleSize(connectionMinimumIdleSize);
    return Redisson.create(redissonCfg);
}
Also used : Codec(org.redisson.client.codec.Codec) SerializationCodec(org.redisson.codec.SerializationCodec) RedisCacheConfig(org.killbill.billing.util.config.definition.RedisCacheConfig) Config(org.redisson.config.Config) SerializationCodec(org.redisson.codec.SerializationCodec)

Aggregations

Codec (org.redisson.client.codec.Codec)34 PubSubType (org.redisson.client.protocol.pubsub.PubSubType)11 java.util (java.util)10 Collectors (java.util.stream.Collectors)9 ConnectionManager (org.redisson.connection.ConnectionManager)9 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)8 MasterSlaveEntry (org.redisson.connection.MasterSlaveEntry)8 Logger (org.slf4j.Logger)8 LoggerFactory (org.slf4j.LoggerFactory)8 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)7 ChannelFuture (io.netty.channel.ChannelFuture)6 ChannelFutureListener (io.netty.channel.ChannelFutureListener)6 Timeout (io.netty.util.Timeout)6 StringCodec (org.redisson.client.codec.StringCodec)6 ByteBuf (io.netty.buffer.ByteBuf)5 java.util.concurrent (java.util.concurrent)5 CompletableFuture (java.util.concurrent.CompletableFuture)5 PubSubPatternStatusListener (org.redisson.PubSubPatternStatusListener)5 org.redisson.client (org.redisson.client)5 PubSubStatusMessage (org.redisson.client.protocol.pubsub.PubSubStatusMessage)5