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 dispatchcmdMap = redisUtil.getCacheMap(dispatchcmdCache_key);
    if(!Tools.isNullOrEmpty(dispatchcmdMap)){
        cmdStatus = (String) dispatchcmdMap.get(busTIDAndDate);
    }
    return cmdStatus;
}
	
/**
* 获得缓存的Map
* @param key
* @return
*/
public Map getCacheIntegerMap(String key){
    Map 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 dispatchcmdMap = redisUtil.getCacheMap(dispatchcmdCache_key);
    if(Tools.isNullOrEmpty(dispatchcmdMap)){
        dispatchcmdMap = new HashMap(); 
    }
    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 dataMap, long minute, int type) {
    if(null != dataMap) {
        HashOperations 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);  
} 

 

你可能感兴趣的:(redis)