一般大家使用redis的string数据结构比较多,在想使用其他数据结构,但是感觉操作复杂的现象身边很普遍,
为简化大家操作redis hashmap,特整理此文,方便大家使用。
一、Redis数据结构 hashmap,RedisDesktopManager使用如下:
二、 通过代码 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;