redis中存储list<map>,list<entity>结构数据如何处理

redis中存储list结构数据如何处理

用到的工具类

1、序列化操作

String multiMapStr = JSON.toJSONString(multiMapList); // list转换为json字符串
Object o = JSON.parse(userList); // list转换为object
List<Map<String, String>> maps = CastBeanUtil.castListMap(JSON.parse(userList), String.class, String.class);// object转换list
List tzAreas = JSON.parseArray(res, TzArea.class); // 反序列化,json字符串转换为list

2、object转换为指定类型的map或者其他类型

使用如下工具类,可以将object转换为list《map》

java 复制代码
package com.geekmice.springbootselfexercise.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @BelongsProject: spring-boot-self-exercise
 * @BelongsPackage: com.geekmice.springbootselfexercise.utils
 * @Author: pingmingbo
 * @CreateTime: 2023-12-09  15:34
 * @Description: TODO
 * @Version: 1.0
 */
public class CastBeanUtil {

    private CastBeanUtil() {
    }

    /**
     * object 转换为list<map>
     * @param obj 源数据
     * @param kCalzz key对应class类型
     * @param vCalzz value对应class类型
     * @param <K>key类型
     * @param <V>value类型
     * @return list<map>
     */
    public static <K, V> List<Map<K, V>> castListMap(Object obj, Class<K> kCalzz, Class<V> vCalzz) {
        List<Map<K, V>> result = new ArrayList<>();
        if (obj instanceof List<?>) {
            for (Object mapObj : (List<?>) obj) {
                if (mapObj instanceof Map<?, ?>) {
                    Map<K, V> map = new HashMap<>(16);
                    for (Map.Entry<?, ?> entry : ((Map<?, ?>) mapObj).entrySet()) {
                        map.put(kCalzz.cast(entry.getKey()), vCalzz.cast(entry.getValue()));
                    }
                    result.add(map);
                }
            }
            return result;
        }
        return null;
    }

}

通过字符串类型处理

list《map》形式

key:字符串

val:序列化过的字符串

java 复制代码
List<Map<String, String>> multiMapList = Lists.newArrayList();
for (int i = 0; i < 5; i++) {
     LinkedHashMap<String, String> itemMap = Maps.newLinkedHashMap();
     itemMap.put("name", "jack" + i);
     if (i % 2 == 0) {
         itemMap.put("age", String.valueOf(10 + i));
         itemMap.put("sex", "男");
     } else {
         itemMap.put("age", String.valueOf(11 + i));
         itemMap.put("sex", "女");
     }
     multiMapList.add(itemMap);
 }
String multiMapStr = JSON.toJSONString(multiMapList);
client.opsForValue().set("str:multiusers", multiMapStr, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
String userList = client.opsForValue().get("str:multiusers");
List<Map<String, String>> maps = CastBeanUtil.castListMap(JSON.parse(userList), String.class, String.class);
log.info("maps : [{}]", maps);

list《entity》结构数据

java 复制代码
List<TzArea> areaList = Lists.newArrayList();
 for (int i = 0; i < 10; i++) {
     TzArea item = new TzArea();
     item.setAreaId((long) i);
     item.setAreaName("江苏省");
     item.setLevel(1);
     item.setParentId(1L);
     areaList.add(item);
 }

 client.opsForValue().set("str:multiareas", JSON.toJSONString(areaList), DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);
 String res = client.opsForValue().get("str:multiareas");
 List<TzArea> tzAreas = JSON.parseArray(res, TzArea.class);
 log.info("tzAreas : [{}]", JSON.toJSONString(tzAreas));
相关推荐
硫酸锌016 分钟前
安卓手机连接Windows电脑后通过DHCP服务为手机分配IP地址
android·windows·计算机网络
用户84913717547161 小时前
订单超时未支付自动取消实现方案 | 三种方案详解
redis·面试·rabbitmq
easyboot1 小时前
Memurai Windows下的redis
redis
ClickHouseDB2 小时前
ClickHouse .NET 驱动程序新特性:从 1.0 到 1.3 的演进之路
java·前端·windows
我不会起名字3222 小时前
Redis RDB 落盘时的 fork 停顿:COW 机制与 3 个降低影响的配置
redis·持久化·fork·cow·rdb
蓝胖的四次元口袋2 小时前
Redis 知识梳理(4)
数据库·redis
我不会起名字3223 小时前
Redis 从 0 到 1(十一):缓存穿透/击穿/雪崩三连击,Go 3 套防御代码
redis·缓存·go·布隆过滤器·雪崩
略懂而已13 小时前
腾讯云COS 自动同步 for windows
windows·云计算·腾讯云
weixin1997010801615 小时前
《抖音商品API:/product/detail 与 /product/list 的字段边界与图片合规踩坑》(附 Python 源码)
服务器·网络·windows
小杍随笔15 小时前
egui 0.37 升级实录:卡顿修复与5倍性能回退
windows·rust·egui