RedisTemplateアクセスHashタイプの値

4714 ワード


ゲートウェイ統計が毎日apiでゲートウェイにアクセスする回数を容易にするために,ここでは統計を行い,統計データをredisサーバに格納し,読み取りを容易にする方法を書いた.
今日は2つの方法を話しています.1つはHashMapを保存する方法で、もう1つはHashを保存する方法です.
一、Hashを保存する方法
使用するのはredisTemplate.opsForHash().put(redisKey, item, value); この方法.
意味:
1.redisに格納されているプライマリ・キー
2、item毎hashのkey
3、value対応keyの値
 
コード:
/**
    * @Description: api        redis(  Hash)
    * @Param:  path     
    * @return:
    * @Author: ma.kangkang
    * @Date: 2019/11/6
    */
    public void addPathNumHash(String path){

        // key   
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //val   
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        //     
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //      
        String todayStr = sdf.format(today).replace("-","");
        String redisKey = "apiVisitNum_".concat(todayStr);
        //   redis
        Map objectMap = redisTemplate.opsForHash().entries(redisKey);
        //        item   
        System.out.println(objectMap.get(path));
        int num = 1;
        if (objectMap == null){
            //   redis     api    ,  redis
            redisTemplate.opsForHash().put(redisKey, path, String.valueOf(num));
        } else {
            if (objectMap.get(path) != null){
                //   redis    path     
                num = Integer.valueOf(objectMap.get(path).toString()) + 1;
                redisTemplate.opsForHash().put(redisKey, path, String.valueOf(num));
            } else {
                redisTemplate.opsForHash().put(redisKey, path, String.valueOf(num));
            }
        }
    }

 
二、HashMapを保存する方法
使用するのはredisTemplate.opsForValue().set(redisKey, pathNumMap); 方法.
意味:
1.rediskeyが格納するredisのキー
2.pathNumMapが格納するredisの値(hashMap)
コード:
/**
    * @Description: api        redis(  HashMap)
    * @Param: path     
    * @return:
    * @Author: ma.kangkang
    * @Date: 2019/11/5
    */
    public void addPathNumHashMap(String path){

        // key   
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //val   
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        PathNum pathNum = new PathNum();
        Map pathNumMap = new HashMap<>();
        Map valueRedis = new HashMap<>();
        Map map = new HashMap<>();
        Map mapAll = new HashMap<>();

        //     
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //      
        String todayStr = sdf.format(today).replace("-","");
        String redisKey = "apiVisitNum_".concat(todayStr);

        //   redis  ,   Map
        Object object = redisTemplate.opsForValue().get(redisKey);
        JSONObject json = (JSONObject) JSON.toJSON(object);
        if (json != null){
            // redis      
            map = JSON.parseObject(JSON.parse(json.toString()).toString());
            mapAll.putAll(map);
        }
        if (json != null && json.get(path) != null){
            pathNum = JSON.parseObject(JSON.parse(json.get(path).toString()).toString(),PathNum.class);
        }
        if (pathNum.getPath() != null ){
            valueRedis.put("path",pathNum.getPath());
            //       path,       
            valueRedis.put("num",pathNum.getNum() + 1);
            map.put(path,valueRedis);
            mapAll.putAll(map);
            JSONObject json1 =new JSONObject(mapAll);
            System.out.println(json1);
            redisTemplate.opsForValue().set(redisKey, mapAll);
        } else {
            //   redis     path,  redis    key,  redis
            valueRedis.put("path",path);
            valueRedis.put("num","1");
            pathNumMap.put(path,valueRedis);
            if (json != null){
                // redis  null,  map redis
                mapAll.putAll(pathNumMap);
                redisTemplate.opsForValue().set(redisKey, mapAll);
            } else {
                redisTemplate.opsForValue().set(redisKey, pathNumMap);
            }
        }
    }

 
対照的に、Hashを保存する方法はもっと簡単ですが、redisサーバはバイナリのデータを表示していますが、HashMapを保存する方法はMapで、redisサーバが表示するときはUTF-8形式の内容を表示しています.
このときは個人のニーズを見る必要がありますが、取りたいUTF-8形式のデータを正常に取り出すことができます.
私は進級したボールで、みんなで2019年のピット登りの過程です.分かち合うのがとても力があると感じたらいいですね、ありがとうございます!!!問題があれば、下のメッセージや本人QQ:313989006を加えてコミュニケーションをとることもできます.