本文介绍: 在上面集成Redis并存取数据的基础上,下面记录两个特殊操作。1、查询所有以指定前缀开头的key的数据并解析,比如这里是以card:card开头的数据。2、查询并解析value值为对象数组的list。
场景
SpringBoot中集成Redis实现对redis中数据的解析和存储:
SpringBoot中集成Redis实现对redis中数据的解析和存储_霸道流氓气质的博客-CSDN博客
在上面集成Redis并存取数据的基础上,下面记录两个特殊操作。
1、查询所有以指定前缀开头的key的数据并解析,比如这里是以card:card开头的数据。
注:
博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
实现
1、针对第一种类似于模糊搜索的情况,很多时候想到的是通过card:card*来实现
但是如果已经知道card:card后面所有可能的数据源的情况下,不建议使用*模糊搜索的情况去查询。
接上面的博客,可在redis工具类RedisCache中新增批量查询的方法
public <T> List<T> getCacheList(Set keys) {
return redisTemplate.opsForValue().multiGet(keys);
}
public List<Map<String, Object>> getAllCarKeys(List<CarInfoPO> carInfoList) {
try {
// 拼接所有car的rediskey 便于快速精准key查找redis缓存 获取card:card点位
Set<String> cardKeys = new HashSet<>();
for (CarInfoPO carInfo : carInfoList) {
cardKeys.add(RedisConstants.CARD_CARD + carInfo.getLocationNumber());
}
List<Map<String, Object>> cards = redisCache.getCacheList(cardKeys);
return cards;
}catch (Exception exception){
System.out.println("getAllCarKeys:异常:"+exception);
return new ArrayList<>();
}
}
这里carInfoList就是所有可能后缀的集合,然后遍历拼接上所有可能的key,调用该
这里所有可能的后缀的集合共有64条,但是redis中只有5条对应后缀的数据
public Stream<CardDTO> convertToCardDTOs(List<Map<String, Object>> cards) {
try {
cards.removeAll(Collections.singletonList(null));
cards.forEach(car -> car.remove("@type"));
Stream<CardDTO> cardDTOStream = JSON.parseArray(JSON.toJSONString(cards), CardDTO.class)
.stream();
return cardDTOStream;
}catch (Exception exception){
System.out.println("convertToCardDTOs异常:"+exception.getMessage());
return Stream.of();
}
}
附对象实现
@Data
public class CardDTO {
private Long cardNumber;
private double x;
private double y;
}
2、解析对象list的集合
在存储时的操作为
List<TEmployee> persons = getPersonOnCar(key, car, loc);
if (persons.size() == 0) {
continue;
} else {
redisService.opsForValue().set(RedisPTConstants.PersonOnCar + key, persons, Long.parseLong(expireTime), TimeUnit.SECONDS);
}
那么在解析数据时
public List<TEmployee> getPersonOnCar(String locationNumber) {
try {
List<Map<String, Object>> cacheObject = redisCache.getCacheObject(RedisConstants.PERSON_ON_CAR + locationNumber);
List<TEmployee> personOnCarList = new LinkedList<>();
if (StringUtils.isNull(cacheObject)) {
return personOnCarList;
} else {
cacheObject.forEach(map ->
{
map.remove("@type");
personOnCarList.add(JSON.parseObject(JSON.toJSONString(map), TEmployee.class));
});
return personOnCarList;
}
}catch (Exception exception){
System.out.println("getPersonOnCar异常:"+exception.getMessage());
return new ArrayList<>();
}
}
解析结果
附对象实现
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TEmployee {
/** 员工编号 */
private Long cardNumber;
/** 员工姓名 */
private String employeeName;
/** 工种名称 */
private String workTypeName;
}
原文地址:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129896929
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_50463.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。