一般大家使用redis的string数据结构比较多,在想使用其他数据结构,但是感觉操作复杂的现象身边很普遍,
为简化大家操作redis hashmap,特整理此文,方便大家使用。

 

一、Redis数据结构 hashmap,RedisDesktopManager使用如下:

 

redis直接存map结构 redis 存hashmap_数据库

 

二、  通过代码 Java端使用

增:

Map<String, UserRankDto> userDtoMap = new HashMap<>();
UserRankDto rankDto = null;
for (Stu stu : stuList) {
	rankDto = new UserRankDto();
	//属性赋值略

	userDtoMap.put(String.valueOf(stu.getUserid()), rankDto);
}
RedisCacheUtils.setMap(AnalysisConstant.REDIS_PERSONAL_MAP, userDtoMap, AnalysisConstant.REDIS_DATABASE_INDEX);


AnalysisConstant.REDIS_PERSONAL_MAP:自定义业务主key
AnalysisConstant.REDIS_DATABASE_INDEX: redis对应的数据库(0-15)
/**
     * 将map写入缓存
     *
     * @param key
     * @param map
     */
    public static <T> void setMap(String key, Map<String, T> map, Integer dbIndex) {
        setMap(key, map, dbIndex, NOT_EXPIRE);
    }

    /**
     * 将map写入缓存
     *
     * @param key
     * @param map
     * @param expire 失效时间(秒)
     */
    public static <T> void setMap(String key, Map<String, T> map, Integer dbIndex, Integer expire) {
        setDbIndex(dbIndex);

        template.opsForHash().putAll(key, map);
        if (expire != NOT_EXPIRE) {
            expire(key, expire);
        }
    }

删:

RedisCacheUtils.deleteByPrefix(AnalysisConstant.REDIS_PERSONAL_MAP, AnalysisConstant.REDIS_DATABASE_INDEX);

/**
 * 删除 指定数据库 前缀模糊匹配 索引
 *
 * @param dbIndex 数据库索引 范围 0-15 默认0
 */
public static void deleteByPrefix(String prefix, Integer dbIndex) {
	setDbIndex(dbIndex);
	Set<String> keys = template.keys(prefix + "*");
	template.delete(keys);
}


/**
 * 删除 指定数据库索引
 *
 * @param key     键
 * @param dbIndex 数据库索引 范围 0-15 默认0
 */
public static void delete(String key, Integer dbIndex) {
	setDbIndex(dbIndex);
	template.delete(key);
}

改:

// 放入hashmap中一个Userid对应值  key - value
// 没有就新增,如果有对应的key为 userid,则覆盖更新
RedisCacheUtils.setMapValue(AnalysisConstant.REDIS_PERSONAL_MAP, String.valueOf(model.getUserid()), userRankDto, AnalysisConstant.REDIS_DATABASE_INDEX);


/**
 * 插入值-对象,指定数据库索引,指定过期时间
 *
 * @param key      键
 * @param mapKey   map键
 * @param mapValue map值
 * @param dbIndex  数据库索引 范围 0-15 默认0
 */
public static <T> void setMapValue(String key, String mapKey, T mapValue, Integer dbIndex) {
	setMapValue(key, mapKey, mapValue, dbIndex, NOT_EXPIRE);
}

/**
 * 插入值-对象,指定数据库索引,指定过期时间
 *
 * @param key      键
 * @param mapKey   map键
 * @param mapValue map值
 * @param dbIndex  数据库索引 范围 0-15 默认0
 * @param expire   过期时间 单位:秒
 */
public static <T> void setMapValue(String key, String mapKey, T mapValue, Integer dbIndex, int expire) {
	// 选择数据库
	setDbIndex(dbIndex);
	BoundHashOperations<String, String, T> boundHashOperations = template.boundHashOps(key);
	boundHashOperations.put(mapKey, mapValue);
	if (expire != NOT_EXPIRE) {
		expire(key, expire);
	}
}

查:

// 获取map中的单个特定key的value值
UserRankDto dto = RedisCacheUtils.getMapValue(AnalysisConstant.REDIS_PERSONAL_MAP,String.valueOf(userId),DB_INDEX);

/**
 * 获取值-字符串,指定数据库索引,设置过期时间
 *
 * @param key     键
 * @param mapKey  map键
 * @param dbIndex 数据库索引 范围 0-15 默认0
 * @return
 */
public static <T> T getMapValue(String key, String mapKey, Integer dbIndex) {
	// 选择数据库
	setDbIndex(dbIndex);
	BoundHashOperations<String, String, T> boundHashOperations = template.boundHashOps(key);
	return boundHashOperations.get(mapKey);
}
// 获取整个hashmap

/**
 * 获取map缓存
 *
 * @param key
 * @return
 */
public static <T> Map<String, T> getMap(String key, Integer dbIndex) {
	setDbIndex(dbIndex);
	BoundHashOperations<String, String, T> boundHashOperations = template.boundHashOps(key);
	return boundHashOperations.entries();
}

补充:

/**
     * redis 模板
     */
    private static StringRedisTemplate template = SpringContextHolder.getBean("stringRedisTemplate");

    /**
     * 不设置过期时长
     */
    public final static int NOT_EXPIRE = -1;

redis版本: 

redis直接存map结构 redis 存hashmap_数据库_02