Redis:
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

需要面试技巧的朋友可以点——【思维导图】——获取免费资料!!!

今天要给大家介绍的就是曾经火爆阿里的redis开发运维实战指南,如今这本书再次上了热榜,所以今天小编就给大家分享出这本书的内容:






- redis特性:











其余的内容就不给大家做详细的展示了,需要获取的小伙伴
<b>package</b> com.example.demo;
<b>import</b> java.security.MessageDigest;
<b>import</b> java.security.NoSuchAlgorithmException;
<b>import</b> java.util.Collections;
<b>import</b> java.util.List;
<b>import</b> org.bouncycastle.util.encoders.Hex;
<b>import</b> reactor.core.publisher.Mono;
<b>import</b> org.springframework.cloud.gateway.filter.GatewayFilter;
<b>import</b> org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
<b>import</b> org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
<b>import</b> org.springframework.http.codec.HttpMessageReader;
<b>import</b> org.springframework.http.server.reactive.ServerHttpRequest;
<b>import</b> org.springframework.stereotype.Component;
<b>import</b> org.springframework.util.Assert;
<b>import</b> org.springframework.web.reactive.function.server.HandlerStrategies;
<b>import</b> org.springframework.web.reactive.function.server.ServerRequest;
<b>import</b> <b>static</b> org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR;
<font><i>/**
* This filter hashes the request body, placing the value in the X-Hash header.
* Note: This causes the gateway to be memory constrained.
* Sample usage: RequestHashing=SHA-256
*/</i></font><font>
@Component
<b>public</b> <b>class</b> RequestHashingGatewayFilterFactory <b>extends</b>
AbstractGatewayFilterFactory<RequestHashingGatewayFilterFactory.Config> {
<b>private</b> <b>static</b> <b>final</b> String HASH_ATTR = </font><font>"hash"</font><font>;
<b>private</b> <b>static</b> <b>final</b> String HASH_HEADER = </font><font>"X-Hash"</font><font>;
<b>private</b> <b>final</b> List<HttpMessageReader<?>> messageReaders =
HandlerStrategies.withDefaults().messageReaders();
<b>public</b> RequestHashingGatewayFilterFactory() {
<b>super</b>(Config.<b>class</b>);
}
@Override
<b>public</b> GatewayFilter apply(Config config) {
MessageDigest digest = config.getMessageDigest();
<b>return</b> (exchange, chain) -> ServerWebExchangeUtils
.cacheRequestBodyAndRequest(exchange, (httpRequest) -> ServerRequest
.create(exchange.mutate().request(httpRequest).build(),
messageReaders)
.bodyToMono(String.<b>class</b>)
.doOnNext(requestPayload -> exchange
.getAttributes()
.put(HASH_ATTR, computeHash(digest, requestPayload)))
.then(Mono.defer(() -> {
ServerHttpRequest cachedRequest = exchange.getAttribute(
CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR);
Assert.notNull(cachedRequest,
</font><font>"cache request shouldn't be null"</font><font>);
exchange.getAttributes()
.remove(CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR);
String hash = exchange.getAttribute(HASH_ATTR);
cachedRequest = cachedRequest.mutate()
.header(HASH_HEADER, hash)
.build();
<b>return</b> chain.filter(exchange.mutate()
.request(cachedRequest)
.build());
})));
}
@Override
<b>public</b> List<String> shortcutFieldOrder() {
<b>return</b> Collections.singletonList(</font><font>"algorithm"</font><font>);
}
<b>private</b> String computeHash(MessageDigest messageDigest, String requestPayload) {
<b>return</b> Hex.toHexString(messageDigest.digest(requestPayload.getBytes()));
}
<b>static</b> <b>class</b> Config {
<b>private</b> MessageDigest messageDigest;
<b>public</b> MessageDigest getMessageDigest() {
<b>return</b> messageDigest;
}
<b>public</b> <b>void</b> setAlgorithm(String algorithm) throws NoSuchAlgorithmException {
messageDigest = MessageDigest.getInstance(algorithm);
}
}
}
</font>

本文含有隐藏内容,请 开通VIP 后查看