zoukankan      html  css  js  c++  java
  • 使用redisList的做同步队列处理数据

    场景:

    在多数据处理的时候,有先有后,比如我们多订单,在同步处理时,想要做到同步处理,先进先出,或者后进先出来处理数据,那么我们可以使用redis的list实现。

    为了能在客户端工具中看到存储在redis中的值,我们使用存储都是字符串方式进行存储。

    测试例子。

    @Resource
        private StringRedisTemplate stringRedisTemplate;
        
        /**
         * 插入一条记录stringRedisTemplate
         * @throws Exception
         */
        @Test
        public void stringredislist_leftpush() throws Exception {
            String redisKey = "stringtest:myredis.list";
            for (int i = 0; i < 10; i++) {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("key" + i, "value" + i);
                stringRedisTemplate.opsForList().leftPush(redisKey, JSON.toJSONString(map));
            }
        }
    
        /**
         * 插入一条记录stringRedisTemplate
         * @throws Exception
         */
        @Test
        public void stringredislist_rightpop() throws Exception {
            String redisKey = "stringtest:myredis.list";
            this.popData("弹出信息", redisKey);
        }
        /**弹出信息*/
        private void popData(String msg, String redisKey) {
            if (stringRedisTemplate.opsForList().size(redisKey) > 0) {
                String objValue = stringRedisTemplate.opsForList().rightPop(redisKey);
                System.out.println(objValue);
                Map<String, Object> map = JSONObject.toJavaObject(JSONObject.parseObject(objValue), Map.class); // object 转换
                System.out.println(map.keySet());
                System.out.println(redisKey + "数据处理,剩余:" + stringRedisTemplate.opsForList().size(redisKey));
                popData(msg, redisKey);
            } else {
                System.out.println(redisKey + "数据处理完成");
                return;
            }
        }

    执行日志打印:

    stringredislist_rightpop....................start....................
    {"key0":"value0"}
    [key0]
    stringtest:myredis.list数据处理,剩余:9
    {"key1":"value1"}
    [key1]
    stringtest:myredis.list数据处理,剩余:8
    {"key2":"value2"}
    [key2]
    stringtest:myredis.list数据处理,剩余:7
    {"key3":"value3"}
    [key3]
    stringtest:myredis.list数据处理,剩余:6
    {"key4":"value4"}
    [key4]
    stringtest:myredis.list数据处理,剩余:5
    {"key5":"value5"}
    [key5]
    stringtest:myredis.list数据处理,剩余:4
    {"key6":"value6"}
    [key6]
    stringtest:myredis.list数据处理,剩余:3
    {"key7":"value7"}
    [key7]
    stringtest:myredis.list数据处理,剩余:2
    {"key8":"value8"}
    [key8]
    stringtest:myredis.list数据处理,剩余:1
    {"key9":"value9"}
    [key9]
    stringtest:myredis.list数据处理,剩余:0
    stringtest:myredis.list数据处理完成
    耗时  0.359 ms
    stringredislist_rightpop....................end....................

    在客户端 redis desktop中看到存储信息。

    如果使用对象存储,那么看到的将是。。看不明白的东西。

  • 相关阅读:
    build.gradle 详解(一)
    Android-SDK下目录结构
    eclipse中更新android SDK的方法(在线更新)
    mysql5.7安装
    DispatcherServlet 和 ContextLoaderListener 的关系,到底用哪个?
    IntelliJ IDEA WEB项目的部署配置
    IDEA 配置 tomcat的数据源
    magento后台使用POST表单时,要使用必要参数form_key才能正常通讯
    Atom安装以及activate-power-mode atom package插件安装
    linux下php-mysql拓展安装
  • 原文地址:https://www.cnblogs.com/a393060727/p/14884837.html
Copyright © 2011-2022 走看看