@Override @SuppressWarnings("unchecked") public <T> Flux<T> execute(RedisScript<T> script, List<K> keys, List<?> args) { Assert.notNull(script, "RedisScript must not be null!"); Assert.notNull(keys, "Keys must not be null!"); Assert.notNull(args, "Args must not be null!"); SerializationPair<?> serializationPair = serializationContext.getValueSerializationPair(); return execute(script, keys, args, serializationPair.getWriter(), (RedisElementReader<T>) serializationPair.getReader()); }
@Test @SuppressWarnings("unchecked") public void customRedisSerializerConfig() { registerAndRefresh(RedisConfig.class, CustomRedisSerializerConfig.class); ReactiveRedisOperationsSessionRepository repository = this.context .getBean(ReactiveRedisOperationsSessionRepository.class); RedisSerializer<Object> redisSerializer = this.context .getBean("springSessionDefaultRedisSerializer", RedisSerializer.class); assertThat(repository).isNotNull(); assertThat(redisSerializer).isNotNull(); ReactiveRedisOperations redisOperations = (ReactiveRedisOperations) ReflectionTestUtils .getField(repository, "sessionRedisOperations"); assertThat(redisOperations).isNotNull(); RedisSerializationContext serializationContext = redisOperations .getSerializationContext(); assertThat(ReflectionTestUtils.getField( serializationContext.getValueSerializationPair().getReader(), "serializer")).isEqualTo(redisSerializer); assertThat(ReflectionTestUtils.getField( serializationContext.getValueSerializationPair().getWriter(), "serializer")).isEqualTo(redisSerializer); assertThat(ReflectionTestUtils.getField( serializationContext.getHashValueSerializationPair().getReader(), "serializer")).isEqualTo(redisSerializer); assertThat(ReflectionTestUtils.getField( serializationContext.getHashValueSerializationPair().getWriter(), "serializer")).isEqualTo(redisSerializer); }
private <C, B> Flux<Message<C, B>> doReceive(SerializationPair<C> channelSerializer, SerializationPair<B> messageSerializer, Mono<ReactiveSubscription> subscription, ByteBuffer[] patterns, ByteBuffer[] channels) { Flux<Message<ByteBuffer, ByteBuffer>> messageStream = subscription.flatMapMany(it -> { Mono<Void> subscribe = subscribe(patterns, channels, it); MonoProcessor<ChannelMessage<ByteBuffer, ByteBuffer>> terminalProcessor = MonoProcessor.create(); return it.receive().mergeWith(subscribe.then(Mono.defer(() -> { getSubscribers(it).registered(); return Mono.empty(); }))).doOnCancel(() -> { Subscribers subscribers = getSubscribers(it); if (subscribers.unregister()) { subscriptions.remove(it); it.unsubscribe().subscribe(v -> terminalProcessor.onComplete(), terminalProcessor::onError); } }).mergeWith(terminalProcessor); }); return messageStream .map(message -> readMessage(channelSerializer.getReader(), messageSerializer.getReader(), message)); }
private <C, B> Flux<Message<C, B>> doReceive(SerializationPair<C> channelSerializer, SerializationPair<B> messageSerializer, Mono<ReactiveSubscription> subscription, ByteBuffer[] patterns, ByteBuffer[] channels) { Flux<Message<ByteBuffer, ByteBuffer>> messageStream = subscription.flatMapMany(it -> { Mono<Void> subscribe = subscribe(patterns, channels, it); MonoProcessor<ChannelMessage<ByteBuffer, ByteBuffer>> terminalProcessor = MonoProcessor.create(); return it.receive().mergeWith(subscribe.then(Mono.defer(() -> { getSubscribers(it).registered(); return Mono.empty(); }))).doOnCancel(() -> { Subscribers subscribers = getSubscribers(it); if (subscribers.unregister()) { subscriptions.remove(it); it.unsubscribe().subscribe(v -> terminalProcessor.onComplete(), terminalProcessor::onError); } }).mergeWith(terminalProcessor); }); return messageStream .map(message -> readMessage(channelSerializer.getReader(), messageSerializer.getReader(), message)); }
private <C, B> Flux<Message<C, B>> doReceive(SerializationPair<C> channelSerializer, SerializationPair<B> messageSerializer, Mono<ReactiveSubscription> subscription, ByteBuffer[] patterns, ByteBuffer[] channels) { Flux<Message<ByteBuffer, ByteBuffer>> messageStream = subscription.flatMapMany(it -> { Mono<Void> subscribe = subscribe(patterns, channels, it); MonoProcessor<ChannelMessage<ByteBuffer, ByteBuffer>> terminalProcessor = MonoProcessor.create(); return it.receive().mergeWith(subscribe.then(Mono.defer(() -> { getSubscribers(it).registered(); return Mono.empty(); }))).doOnCancel(() -> { Subscribers subscribers = getSubscribers(it); if (subscribers.unregister()) { subscriptions.remove(it); it.unsubscribe().subscribe(v -> terminalProcessor.onComplete(), terminalProcessor::onError); } }).mergeWith(terminalProcessor); }); return messageStream .map(message -> readMessage(channelSerializer.getReader(), messageSerializer.getReader(), message)); }
private K readKey(ByteBuffer buffer) { return getSerializationContext().getKeySerializationPair().getReader().read(buffer); } }
@Override @SuppressWarnings("unchecked") public <T> Flux<T> execute(RedisScript<T> script, List<K> keys, List<?> args) { Assert.notNull(script, "RedisScript must not be null!"); Assert.notNull(keys, "Keys must not be null!"); Assert.notNull(args, "Args must not be null!"); SerializationPair<?> serializationPair = serializationContext.getValueSerializationPair(); return execute(script, keys, args, serializationPair.getWriter(), (RedisElementReader<T>) serializationPair.getReader()); }
/** * Deserialize a {@link ByteBuffer} into the according type. * * @param buffer must not be {@literal null}. * @return the deserialized value. */ default T read(ByteBuffer buffer) { return getReader().read(buffer); }
@SuppressWarnings("unchecked") private <C, B> Message<C, B> readMessage(RedisElementReader<C> channelSerializer, RedisElementReader<B> messageSerializer, Message<ByteBuffer, ByteBuffer> message) { if (message instanceof PatternMessage) { PatternMessage<ByteBuffer, ByteBuffer, ByteBuffer> patternMessage = (PatternMessage) message; String pattern = read(stringSerializationPair.getReader(), patternMessage.getPattern()); C channel = read(channelSerializer, patternMessage.getChannel()); B body = read(messageSerializer, patternMessage.getMessage()); return new PatternMessage<>(pattern, channel, body); } C channel = read(channelSerializer, message.getChannel()); B body = read(messageSerializer, message.getMessage()); return new ChannelMessage<>(channel, body); }
private K readKey(ByteBuffer buffer) { return getSerializationContext().getKeySerializationPair().getReader().read(buffer); } }
@SuppressWarnings("unchecked") private <C, B> Message<C, B> readMessage(RedisElementReader<C> channelSerializer, RedisElementReader<B> messageSerializer, Message<ByteBuffer, ByteBuffer> message) { if (message instanceof PatternMessage) { PatternMessage<ByteBuffer, ByteBuffer, ByteBuffer> patternMessage = (PatternMessage) message; String pattern = read(stringSerializationPair.getReader(), patternMessage.getPattern()); C channel = read(channelSerializer, patternMessage.getChannel()); B body = read(messageSerializer, patternMessage.getMessage()); return new PatternMessage<>(pattern, channel, body); } C channel = read(channelSerializer, message.getChannel()); B body = read(messageSerializer, message.getMessage()); return new ChannelMessage<>(channel, body); }
@Override @SuppressWarnings("unchecked") public <T> Flux<T> execute(RedisScript<T> script, List<K> keys, List<?> args) { Assert.notNull(script, "RedisScript must not be null!"); Assert.notNull(keys, "Keys must not be null!"); Assert.notNull(args, "Args must not be null!"); SerializationPair<?> serializationPair = serializationContext.getValueSerializationPair(); return execute(script, keys, args, serializationPair.getWriter(), (RedisElementReader<T>) serializationPair.getReader()); }
/** * Deserialize a {@link ByteBuffer} into the according type. * * @param buffer must not be {@literal null}. * @return the deserialized value. */ default T read(ByteBuffer buffer) { return getReader().read(buffer); }
@SuppressWarnings("unchecked") private <C, B> Message<C, B> readMessage(RedisElementReader<C> channelSerializer, RedisElementReader<B> messageSerializer, Message<ByteBuffer, ByteBuffer> message) { if (message instanceof PatternMessage) { PatternMessage<ByteBuffer, ByteBuffer, ByteBuffer> patternMessage = (PatternMessage) message; String pattern = read(stringSerializationPair.getReader(), patternMessage.getPattern()); C channel = read(channelSerializer, patternMessage.getChannel()); B body = read(messageSerializer, patternMessage.getMessage()); return new PatternMessage<>(pattern, channel, body); } C channel = read(channelSerializer, message.getChannel()); B body = read(messageSerializer, message.getMessage()); return new ChannelMessage<>(channel, body); }
@SuppressWarnings("unchecked") private HK readHashKey(ByteBuffer buffer) { return (HK) serializationContext.getHashKeySerializationPair().getReader().read(buffer); }
private K readKey(ByteBuffer buffer) { return getSerializationContext().getKeySerializationPair().getReader().read(buffer); } }
/** * Deserialize a {@link ByteBuffer} into the according type. * * @param buffer must not be {@literal null}. * @return the deserialized value. */ default T read(ByteBuffer buffer) { return getReader().read(buffer); }