• 重温经典,曾经风靡一时的阿里内网Redis开发参考手册


    Redis:

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

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

     

     

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

    • redis特性:

    其余的内容就不给大家做详细的展示了,需要获取的小伙伴

    package com.example.demo;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Collections;
    import java.util.List;
    
    import org.bouncycastle.util.encoders.Hex;
    import reactor.core.publisher.Mono;
    
    import org.springframework.cloud.gateway.filter.GatewayFilter;
    import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
    import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
    import org.springframework.http.codec.HttpMessageReader;
    import org.springframework.http.server.reactive.ServerHttpRequest;
    import org.springframework.stereotype.Component;
    import org.springframework.util.Assert;
    import org.springframework.web.reactive.function.server.HandlerStrategies;
    import org.springframework.web.reactive.function.server.ServerRequest;
    
    import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR;
    
    /**
     * 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
     */
    @Component
    public class RequestHashingGatewayFilterFactory extends
            AbstractGatewayFilterFactory {
    
        private static final String HASH_ATTR = "hash";
        private static final String HASH_HEADER = "X-Hash";
        private final List> messageReaders =
                HandlerStrategies.withDefaults().messageReaders();
    
        public RequestHashingGatewayFilterFactory() {
            super(Config.class);
        }
    
        @Override
        public GatewayFilter apply(Config config) {
            MessageDigest digest = config.getMessageDigest();
            return (exchange, chain) -> ServerWebExchangeUtils
                    .cacheRequestBodyAndRequest(exchange, (httpRequest) -> ServerRequest
                        .create(exchange.mutate().request(httpRequest).build(),
                                messageReaders)
                        .bodyToMono(String.class)
                        .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, 
                                    "cache request shouldn't be null");
                            exchange.getAttributes()
                                    .remove(CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR);
    
                            String hash = exchange.getAttribute(HASH_ATTR);
                            cachedRequest = cachedRequest.mutate()
                                    .header(HASH_HEADER, hash)
                                    .build();
                            return chain.filter(exchange.mutate()
                                    .request(cachedRequest)
                                    .build());
                        })));
        }
    
        @Override
        public List shortcutFieldOrder() {
            return Collections.singletonList("algorithm");
        }
    
        private String computeHash(MessageDigest messageDigest, String requestPayload) {
            return Hex.toHexString(messageDigest.digest(requestPayload.getBytes()));
        }
    
        static class Config {
    
            private MessageDigest messageDigest;
    
            public MessageDigest getMessageDigest() {
                return messageDigest;
            }
    
            public void setAlgorithm(String algorithm) throws NoSuchAlgorithmException {
                messageDigest = MessageDigest.getInstance(algorithm);
            }
        }
    }
    

  • 相关阅读:
    使用chat-GPT接口提取合同中关键信息
    蓝牙认证检测实验室授权政策与认可要求解析
    Redis6 十:使用Jedis连接Redis、使用redis完成手机验证码功能案例
    cnpm安装步骤
    Redis的下载与安装Windows和Linux版
    pytest合集(3)— 测试用例
    【ITRA】2022年ITRA赛事注册流程 从0-1
    三、内存管理 (二)虚拟存储器
    【Node.js】解决接口跨域问题(CORS和JSONP)
    【Java+SpringBoot】监考任务分配系统(源码+远程部署+项目定制开发+代码讲解+毕业设计+答辩教学)
  • 原文地址:https://blog.csdn.net/JHIII/article/details/126601902