redis 脚本 redis 分页

无序:
sadd:
      String script = "redis.call('sadd',KEYS[1],ARGV[1]) " + " if( redis.call('ttl',KEYS[1]) <= 0 ) "
                                        + " then redis.call('expire',KEYS[1],tonumber(ARGV[2]) ) end";
     List<String> keys = new ArrayList<>(1);
     keys.add(key);
     List<String> args = new ArrayList<>(3);
     args.add(member);
      args.add(到期时间 秒);
       jedisCluster.evalscript keys ,args)
有序:
zadd: 
      Long zadd(String key, double score, String member);

      List<String> keys = new ArrayList<>(1);
     keys.add(key);
      List<String> args = new ArrayList<>(3);
     args.add(member);
     args.add(scope);
     args.add(到期时间 秒);
            script = " redis.call('zadd',KEYS[1],ARGV[2],ARGV[1]) " +
                    " if( redis.call('ttl',KEYS[1]) <= 0 ) " +
                    " then redis.call('expire',KEYS[1],tonumber(ARGV[3]) ) end ";
            jedisCluster.eval(script, keys, args);
散列:
hset:      Long hset(String key, String field, String value);
           String allScript = "redis.call('hset',KEYS[1],ARGV[1],ARGV[2])";
            List<String> allKeys = new ArrayList<>(1);
            allKeys.add(key);
            List<String> allArgs = new ArrayList<>(2);
            allArgs.add(filed);
            allArgs.add(value);
            jedisCluster.eval(allScript, allKeys, allArgs);
      或者:
 String allScript = "redis.call('hset',KEYS[1],ARGV[1],ARGV[2])";
            List<String> allKeys = new ArrayList<>(1);
            allKeys.add(key);
            List<String> allArgs = new ArrayList<>(2);
            allArgs.add(filed);
            allArgs.add(value);
         allArgs.add(到期时间 秒);
            jedisCluster.eval(allScript, allKeys, allArgs);
        String script = "redis.call('hset',KEYS[1],ARGV[1],ARGV[2]) " + " if( redis.call('ttl',KEYS[1]) <= 0 ) "
                    + " then redis.call('expire',KEYS[1],tonumber(ARGV[3]) ) end";
hincrBy: 

script = "redis.call('hincrBy',KEYS[1],ARGV[1],tonumber(ARGV[2])) " + " if( redis.call('ttl',KEYS[1]) <= 0 ) "
                + " then redis.call('expire',KEYS[1],tonumber(ARGV[3]) ) end";
        List<String> keys = new ArrayList<>(1);
        keys.add(key);
        args = new ArrayList<>(3);
        //总车流量:1 +1
        args.add(filed);
        args.add(数字加多少);
        args.add(到期时间 秒);
        jedisCluster.eval(script, keys, args);
llen:

  System.out.println(jedisCluster.lrange("HIGHT_ALARM_PUSHMSG",0,-1));
        List<String> keys = new ArrayList(1);
        keys.add("HIGHT_ALARM_PUSHMSG");
        List<String> args = new ArrayList(1);
        args.add("messss fffff2 ");
        String script = "local count = redis.call('llen',KEYS[1]) if(count >= 1) then redis.call('rpop',KEYS[1]) end redis.call('lpush',KEYS[1],ARGV[1])";
        jedisCluster.eval(script,keys,args);
        System.out.println(jedisCluster.lrange("HIGHT_ALARM_PUSHMSG",0,-1));
或者;
     System.out.println(jedisCluster.lrange("HIGHT_ALARM_PUSHMSG",0,-1));
        List<String> keys = new ArrayList(1);
        keys.add("HIGHT_ALARM_PUSHMSG");
        List<String> args = new ArrayList(1);
        args.add("messss fffff6 ");
        String script = "local count = redis.call('llen',KEYS[1]) if(count >= 5) then redis.call('rpop',KEYS[1]) end redis.call('lpush',KEYS[1],ARGV[1])";
        System.out.println(jedisCluster.eval(script,keys,args));
        System.out.println(jedisCluster.lrange("HIGHT_ALARM_PUSHMSG",0,-1));
    测试结果:
[messss fffff5 , messss fffff4 , messss fffff3 , messss fffff2 , messss fffff1 ]
null
[messss fffff6 , messss fffff5 , messss fffff4 , messss fffff3 , messss fffff2 ]

get :
String key = "key111";
        List<String> keys = new ArrayList<String>(1);
        keys.add(key);
        List<String> values = new ArrayList<String>(1);
        values.add("212112");
        String script = " local v = 0  if(redis.call('get',KEYS[1]) == 'dfaa') then v = 1 else v = 2 end return v";
        System.out.println(jedisCluster.eval(script,keys,values));
        System.out.println(jedisCluster.get("key111"));
redis分页:
       long currMills = System.currentTimeMillis();
        long s = System.currentTimeMillis();

        Map<String, String> traceMap = new HashMap<>();
        if(StringUtils.isEmpty(vno)) {
            int fromIndex = page==null?0:(page.getPageNum() - 1) * page.getPageSize();
            int pageSize = page==null?15:page.getPageSize();
            Set<String> traceSet = redis.zrevrangeByScore(RedisKeyConsts.TRACE_ZSET+dateStr, max, min, fromIndex, pageSize);

            for (String traceStr : traceSet) {
                String trace = redis.hget(RedisKeyConsts.TRACE + dateStr, traceStr);
                traceMap.put(traceStr, trace);
            }
        }else{
            String cursor="0";
            ScanParams scanParams =new ScanParams();
            scanParams.count(fetchSize);
            scanParams.match("*"+vno+"*");
            do {
                ScanResult<Map.Entry<String, String>> scanResult = redis.hscan(RedisKeyConsts.TRACE + dateStr, cursor, scanParams);
                List<Map.Entry<String, String>> entryList = scanResult.getResult();
                for (Map.Entry<String, String> entry : entryList) {
                    traceMap.put(entry.getKey(),entry.getValue());
                }
                cursor = scanResult.getStringCursor();
            } while (!cursor.equals("0"));
        }
  //不传参数
        if(StringUtils.isEmpty(vehicleNo)){
            pager = new PageUtils<>();
            pager.setPageNum(page.getPageNum());
            pager.setPageSize(page.getPageSize());
            pager.setTotal(redis.zcount(RedisKeyConsts.TRACE_ZSET+dateStr,min,max));
            pager.setDataList(vehicleSuperviseDtos);
        }else{
            pager = new PageUtils<>(page.getPageNum(), page.getPageSize(), vehicleSuperviseDtos);
        }


//多线程
//线程工厂
public class ExecutorFactory {

    private static ExecutorService pool;

    static {
        initPool();
    }

    private static void initPool() {
        pool = Executors.newFixedThreadPool(50, new ThreadFactoryBuilder().setNameFormat("qd-pool-%d").build());
    }

    public static void execute(Runnable command) {
        pool.execute(command);
    }

    public static <T> Future<T> submit(Callable<T> task) {
        return pool.submit(task);
    }
}

      s = System.currentTimeMillis();
        List<Map<String, String>> result = new ArrayList<>(traceMap.entrySet().size());
        List<Future<Map<String, String>>> futureList = new ArrayList<>(traceMap.entrySet().size());
        for (Map.Entry<String, String> entry : traceMap.entrySet()) {
            futureList.add(ExecutorFactory.submit(new HandleTraceTask(entry, vno, currMills)));
        }
        for (Future<Map<String, String>> future : futureList) {
            try {
                Map<String, String> item = future.get();
                if (item != null) {
                    result.add(item);
                }
            } catch (Exception e) {
                logger.error("跳过处理出错的轨迹点", e);
            }
        }


private class HandleTraceTask implements Callable<Map<String, String>> {
        private Map.Entry<String, String> entry;
        private String vno;
        private long currMills;

        public HandleTraceTask(Map.Entry<String, String> entry, String vno, long currMills) {
            this.entry = entry;
            this.vno = vno;
            this.currMills = currMills;
        }

        @Override
        public Map<String, String> call() throws Exception {
            return handleTraceData(entry, vno, currMills);
        }
    }

    /**
     * 处理轨迹数据
     *
     * @param entry     原始数据
     * @param vno       车牌号
     * @param currMills 当前时间
     * @return map
     */
    private Map<String, String> handleTraceData(Map.Entry<String, String> entry, String vno, long currMills) {
        String[] vnoAndColor = entry.getKey().split("_");
        // lon@lat@gpsTime@direction@gpsSpeed@rtAreaCode
        String[] data = entry.getValue().split(SEP,8);
        if (isEmpty(data[0]) || isEmpty(data[1]) || isEmpty(data[2])) {
            return null;
        }
        if (vno != null && !vnoAndColor[0].contains(vno)) {
            return null;
        }
        Map<String, String> item = new HashMap<>();
        item.put("isOnline", isOnline(Long.parseLong(data[2]), currMills) ? "1" : "0");
        item.put("lat", data[1]);
        item.put("lon", data[0]);
        item.put("direction", data[3]);
        item.put("gpsTime", data[2]);
        item.put("gpsSpeed", String.valueOf(new BigDecimal(NumberUtils.toDouble(data[4], 0D)).setScale(1, RoundingMode.HALF_UP)));
        item.put("vno", vnoAndColor[0]);
        item.put("color", vnoAndColor[1]);
        if (data.length == 6) {
            item.put("area", data[5]);
        }
        return item;
    }

list排序:
 List<VehicleSuperviseDto> vehicleSuperviseDtos = this.findList(vehicleNo, dateStr,page,min,max);
  vehicleSuperviseDtos.sort(Comparator.comparing(VehicleSuperviseDto::getIfOnline).reversed().thenComparing(VehicleSuperviseDto::getVehicleNo));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值