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);  
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值