Redis Hset 命令 - HashGet方式获取以及HashSet写入(将哈希表 key 中的字段 field 的值设为 value )

简单来说就是用一条查询拿出存储在redis中的value -> map对应的key的值:

redis是key-value的数据的Nosql数据库,这个例子的redis某一个key的value就是上述的map,不使用fieldKey的话只能是先将整个map的值拿出来,再取对应的key的值,这样造成了资源和性能的浪费,使用field可以很好解决这个问题,以下分为原有逻辑以及改进之后的逻辑:

    public String getDispatchcmdBybusTID(String busTIDAndDate) {
		String cmdStatus = "";
	   	Map<Object,Object> dispatchcmdMap = redisUtil.getCacheMap(dispatchcmdCache_key);
	    if(!Tools.isNullOrEmpty(dispatchcmdMap)){
	    	cmdStatus = (String) dispatchcmdMap.get(busTIDAndDate);
	    }
		return cmdStatus;
	}
	
	/**
     * 获得缓存的Map
     * @param key
     * @return
     */
    public Map<Object, Object> getCacheIntegerMap(String key){
        Map<Object, Object> map = redisTemplate.opsForHash().entries(key);
        return map;
    }

以下为改进写法:

   //这种写法就可以省去了把整个map拿出来再做取值的繁琐过程
    public String getDispatchcmdBybusTID(String busTID) {
	   	String cmdStatus = String.valueOf(redisUtil.getFieldVal(dispatchcmdCache_key,busTID));
		return cmdStatus;
	}
	
	/**
     * 通过field获取值
     * @param hashKey
     * @param fieldKey
     * @return
     */
    public Object getFieldVal(String hashKey,String fieldKey){
        Object object = redisTemplate.opsForHash().get(hashKey, fieldKey);
        return object;
    }

 上述方法是读操作,以下为写操作,为什么这样写道理同上

//同样是拿了所有的值,再put进map后写入
    public String putDispatchcmdBybusTID(String busTID,String cmdStatus) {
	   	Map<Object,Object> dispatchcmdMap = redisUtil.getCacheMap(dispatchcmdCache_key);
	    if(Tools.isNullOrEmpty(dispatchcmdMap)){
	    	dispatchcmdMap = new HashMap<Object,Object>(); 
	   	 }
	    dispatchcmdMap.put(busTID, cmdStatus);
		redisUtil.setCacheMap(dispatchcmdCache_key, dispatchcmdMap, 0, 0);
		return cmdStatus;
	}
	
	/**
     * 缓存Map
     * @param key
     * @param dataMap
     * @param minute    缓存时间
     * @param type    0:不需要, 1:需要且为默认 2:需要且过期时间为minute
     * @return
     */
    public int setCacheMap(String key,Map<Object, Object> dataMap, long minute, int type) {
        if(null != dataMap)
        {
            HashOperations<String, Object, Object> hashOperations = redisTemplate.opsForHash();
            hashOperations.putAll(key,dataMap);
            //设置过期时间
        	if(type != 0){
        		try {
        			if(type == 1){
        				minute = MaximumTimeOfDay.getDiffTimeOfDay(System.currentTimeMillis());
        			}
        			if(minute > 0)expire(key, minute, TimeUnit.MILLISECONDS, false);
				} catch (Exception e) {
					systemLog.error("【error】setCacheMap", e);
				}
        	}
        } else{
            return 0;
        }
        return dataMap.size();
    }
    
    
	//直接将值插入对应的HashMap就好了
	public String putDispatchcmdBybusTID(String busTID,String cmdStatus) {
		redisUtil.hashSet(dispatchcmdCache_key, busTID, cmdStatus);
		return cmdStatus;
	}
	
	/**
     * 向一张hash表中放入数据,如果不存在将创建
     * @param key
     * @param item
     * @param value
     */
    public void hashSet(String key,String item,Object value) {  
       redisTemplate.opsForHash().put(key, item, value);  
    } 

猜你喜欢

转载自blog.csdn.net/butterballj/article/details/81161849