1. 程式人生 > >RedisTemplate模板的使用(一)

RedisTemplate模板的使用(一)

一、Map =======boundHashOps

(1)主方法,向redis當中儲存Map值

@Resource
private RedisTemplate<String, Object> redisTemplate;

private static final Long EXPIRED_MINUTE = new Long(1);
private static final String HUM_NUM_KEY = "HUM_NUM_";	//統計醫師人文醫學測評次數

  @RequestMapping("/hum_num")
    public 
    @ResponseBody
    ApiResult getDoctorHumnum(@RequestParam Map<String,Object> paramMap) {
    	
    	paramMap.put("orgs", this.getOrganization());
    	
    	Map<String, Object> result = Maps.newHashMap();
    	String key = this.generateKey(HUM_NUM_KEY, paramMap);
    	if(this.isExistInRedis(key)) {
    		result = this.getMapFromRedis(key);
    	}else {
    		result = doctorInfoService.selectDoctorHumNum(paramMap);
    		this.putMapToRedis(key, result);
    	}
    	return ApiResult.success(result);
    }

(2)設定Key值

private String generateKey(String prefix, Map<String,Object> paramMap) {
    	return prefix 
				+ (paramMap.get("orgUuid")==null?"": paramMap.get("orgUuid").toString())
				+ "_"
				+ (paramMap.get("cycleId")==null?"": paramMap.get("cycleId").toString());
    }

注意: 上面的設定key其實就是一個識別的字串,將此字串儲存到redis裡面作為key

(3)判斷key是否存在

private boolean isExistInRedis(String key) {
    	return redisTemplate.boundHashOps(key).size()==0? false: true;
           // 注意的是因為我們插入的是一個Map所以儲存的是Hash的內容。
    }

(4)獲取redis當中儲存的值

private Map<String, Object> getMapFromRedis(String key){
    	
        // 這裡使用guava工具類中的方法,在一定程度上簡化了使用HasMap時建立泛型的錯誤操作
    	Map<String, Object> result = Maps.newHashMap();
    	Map<Object, Object> map = redisTemplate.boundHashOps(key).entries();// 根據key獲取Map
   
        // 將Map遍歷出來 	
    	for(Map.Entry<Object, Object> entry: map.entrySet()) {
    		result.put(entry.getKey().toString(), entry.getValue());
    	}
    	
    	return result;
    }

(5)將Map中的值插入到Redis當中的方法

private void putMapToRedis(String key, Map<?, ?> map) {
    	
    	redisTemplate.boundHashOps(key).putAll(map);
        // 設定過期時間,單位是分鐘
    	redisTemplate.boundHashOps(key).expire(EXPIRED_MINUTE, TimeUnit.MINUTES);
    }

二、Object========boundVauleOps 

(1)主方法

@Resource
private RedisTemplate<String, Object> redisTemplate;

@RequestMapping("/statistic")
    @ResponseBody
    public ApiResult statistic(@RequestParam Map<String, Object> paramMap) {
        String key = this.generateKey(PERIDIC_STATISTIC_TAB3_KEY, paramMap);
        StatisticGroupResult statistic = null;
        if (isExistStringInRedis(key)) {
            statistic =(StatisticGroupResult) redisTemplate.boundValueOps(key).get();
        } else {
            statistic = operateService.selectStatisticGroup(paramMap);
            redisTemplate.boundValueOps(key).set(statistic,EXPIRED_MINUTE, TimeUnit.MINUTES);
        }
        return ApiResult.success(statistic);
    }

(2)判斷key值是否存在

 // 判斷字串型別的Key值是否存在
    private boolean isExistStringInRedis(String key) {
        return redisTemplate.boundValueOps(key).size()==0? false: true;
    }

注意這裡面存在一些內容和Map中使用的是公共的

三、List  ============boundListOps

(1)主方法

    // 使用的都是String,Object方式
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    

    @RequestMapping("/periodic_list")
    @ResponseBody
    public ApiResult periodicList(@RequestParam Map<String,Object> paramMap) {
        String key = this.generateKey(PERIDIC_TAB3_KEY ,paramMap);
        List<PeriodicExamineResult> result = new ArrayList<>();
        if (isExistListInRedis(key)) {
            List<Object> list = redisTemplate.boundListOps(key).range(0,-1);
            for (int i = 0; i < list.size(); i++) {
                result.add((PeriodicExamineResult) list.get(i));
            }
        }else {
            result = operateService.queryPeriodicExamineList(paramMap);
            for (PeriodicExamineResult temp:result) {
                redisTemplate.boundListOps(key).leftPush(temp);
                redisTemplate.boundListOps(key).expire(EXPIRED_MINUTE, TimeUnit.MINUTES);
            }
        }
        return ApiResult.success(result);
    }

(2)判斷List當中的值是否存在

 // 判斷列表型別的key值是否存在
    private boolean isExistListInRedis(String key) {
        return redisTemplate.boundListOps(key).size() == 0 ? false : true;
    }

四、當RedisTemplate<String,List<....>> redisTemplate;

    @Resource
    private RedisTemplate<String, List<PeriodicExamineResult>> redisTemplate;

     @org.junit.Test
    public void Test4() {
        String key = "LI_HAO"; // 設定key
        List<PeriodicExamineResult> result = new ArrayList<>();
        Map<String,Object> paramMap = Maps.newHashMap();
        result = operateService.queryPeriodicExamineList(paramMap);
        
        redisTemplate.boundListOps(key).leftPush(result); // 將獲取的result放到redis當中
        redisTemplate.boundListOps(key).expire(10, TimeUnit.MINUTES);// 設定時間

        List<List<PeriodicExamineResult>>  list =redisTemplate.boundListOps(key).range(1,-1);  //將儲存到redis當中的值獲取出來
        for (PeriodicExamineResult res:list.get(0)) {
            System.out.println(res.getTotal());
        }
    }

注意: range(1,-1) 表示遍歷出列表中的所有內容。因為我們是以List插入的所以也應該以List進行接收。所以使用list.get(0)從而獲取到插入的列表 

五、如果在使用分頁時遇到這個問題,那麼我們可以手動的寫一個分頁,用來承接List

    //它所使用的模板同上面使用的一樣為:
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    

    @RequestMapping("/examine_result_search")
    @ResponseBody
    public JQGirdPageResult examineResultSearch(@RequestParam Map<String,Object> paramMap, @ModelAttribute PageBean pageBean) {

        String key = this.generateKey(PERIDIC_EXAMINE_TAB4_KEY, paramMap);
        List<PeriodicExaminePageResult> result = new ArrayList<>();
        if (isExistListInRedis(key)) {
            List<Object> list = redisTemplate.boundListOps(key).range(0,-1);
            for (int i = 0; i < list.size(); i++) {
                result.add((PeriodicExaminePageResult) list.get(i));
            }
            Long total =Long.valueOf(result.size());
            Integer pageSize = pageBean.getRows();
            Integer page = pageBean.getPage();
            JQGirdPageResult jqGirdPageResult = new JQGirdPageResult();
            Integer totalPage = total % pageSize == 0? total.intValue() / pageSize: total.intValue() / pageSize + 1;
            jqGirdPageResult.setTotal(totalPage == 0? 1: totalPage);
            jqGirdPageResult.setPage(page);
            jqGirdPageResult.setRows(result);
            jqGirdPageResult.setRecords(total);
            return jqGirdPageResult;

        } else {
            result = operateService.queryPeriodicPageList(paramMap);
            for (PeriodicExaminePageResult temp:result) {
                redisTemplate.boundListOps(key).leftPush(temp);
                redisTemplate.boundListOps(key).expire(EXPIRED_MINUTE, TimeUnit.MINUTES);
            }
            Long total =Long.valueOf(result.size());
            Integer pageSize = pageBean.getRows();
            Integer page = pageBean.getPage();
            JQGirdPageResult jqGirdPageResult = new JQGirdPageResult();
            Integer totalPage = total % pageSize == 0? total.intValue() / pageSize: total.intValue() / pageSize + 1;
            jqGirdPageResult.setTotal(totalPage == 0? 1: totalPage);
            jqGirdPageResult.setPage(page);
            jqGirdPageResult.setRows(result);
            jqGirdPageResult.setRecords(total);
            return jqGirdPageResult;
        }

    }