• 【spring boot】spring boot 基于redis pipeline 管道,批量操作redis命令


    spring boot 2.x 

    使用RedisTemplate 操作

    ===================================

    1.pom.xml

        <!--spring2.0集成redis所需common-pool2-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>2.4.2</version>
            </dependency>
            <!-- 使用redis的LUA脚本 需要序列化操作的jar-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>

    2.redisConfig 需要加入spring的自动配置

    /**
     * @author sxd
     * @date 2019/5/27 16:13
     */
    @Configuration
    @AutoConfigureAfter(RedisAutoConfiguration.class)
    public class RedisConfig {
    
    
    
        @Bean
        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate redisTemplate = new RedisTemplate();
            redisTemplate.setConnectionFactory(factory);
            RedisSerializer keySerializer = new StringRedisSerializer();
    //        RedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();
            //key采用字符串反序列化对象
            redisTemplate.setKeySerializer(keySerializer);
            //value也采用字符串反序列化对象
            //原因:管道操作,是对redis命令的批量操作,各个命令返回结果可能类型不同
            //可能是 Boolean类型 可能是String类型 可能是byte[]类型 因此统一将结果按照String处理
            redisTemplate.setValueSerializer(keySerializer);
            return redisTemplate;
        }
    
    
    }
    View Code

    3.controller

      @Autowired
        RedisTemplate redisTemplate;
    
    
        /**
         * redis 批量操作其中一种方式
         * redis pipeline 管道技术
         */
        @RequestMapping(value = "/redisPipeline" )
        public void redisPipeline(){
    
    //        1.executePipelined 重写 入参 RedisCallback 的doInRedis方法
            List<Object> resultList = redisTemplate.executePipelined(new RedisCallback<Object>() {
    
                @Override
                public String doInRedis(RedisConnection connection) throws DataAccessException {
    //                2.connection 打开管道
                    connection.openPipeline();
    
    //                3.connection 给本次管道内添加 要一次性执行的多条命令
    
    //                3.1 一个set操作
                    byte[] key1 = "mykey1".getBytes();
                    byte[] value1 = "字符串value".getBytes();
                    connection.set(key1,value1);
    
    //                3.2一个批量mset操作
                    Map<byte[],byte[]> tuple = new HashMap<>();
                    tuple.put("m_mykey1".getBytes(),"m_value1".getBytes());
                    tuple.put("m_mykey2".getBytes(),"m_value2".getBytes());
                    tuple.put("m_mykey3".getBytes(),"m_value3".getBytes());
                    connection.mSet(tuple);
    
    //                 3.3一个get操作
                    connection.get("m_mykey2".getBytes());
    
    //                4.关闭管道 不需要close 否则拿不到返回值
    //                connection.closePipeline();
    
    //                这里一定要返回null,最终pipeline的执行结果,才会返回给最外层
                    return null;
                }
            });
    
    
    //        5.最后对redis pipeline管道操作返回结果进行判断和业务补偿
            for (Object str : resultList) {
                System.out.println(String.valueOf(str));
            }
            
        }
    View Code

    运行结果:

    true
    true
    m_value2

    redis中结果:

  • 相关阅读:
    【转】STL中map用法详解
    【转】容器 C++ set和map
    .NET简谈面向接口编程 狼人:
    详解.NET程序集的加载规则 狼人:
    ASP.NET MVC 入门介绍 (上) 狼人:
    页面片段缓存(二) 狼人:
    改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects) 狼人:
    改善代码设计 —— 组织好你的数据(Composing Data) 狼人:
    C# 中奇妙的函数联接序列的五种简单方法 狼人:
    Log4Net 全方位跟踪程序运行 狼人:
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/10949727.html
Copyright © 2020-2023  润新知