使用Redis的Hash存储Java对象

Hash的特点

1.将具有同一类规则的数据放到redis中的一个数据容器里,便于查找数据。
2.使用hash 省内存。在hash类型中,一个key可以对应多个field,一个field对应一个value。将一个对象存储为hash类型的好处之一:较于每个字段都单独存储成string类型来说,更能节约内存。
在这里插入图片描述

代码实现

package com.redisdemo;

import redis.clients.jedis.Jedis;

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

public class RedisHashDemo {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        List<User> userList = getUserList();
        for (User user : userList){
            Map<String,String> map = new HashMap<>();
            map.put("id",user.getId());
            map.put("name",user.getName());
            jedis.hmset(user.getId(),map);
            Map userObj =jedis.hgetAll(user.getId());
            System.out.println(userObj);
            String name =jedis.hget(user.getId(),"name");
            System.out.println("按id和name取值:"+name);
        }
        // 4.释放资源
        jedis.close();

    }

    private static List<User> getUserList(){
        List<User> userList = new ArrayList<>();
        User user1 = new User();
        user1.setId("1");
        user1.setName("王八1");

        User user2 = new User();
        user2.setId("2");
        user2.setName("王八2");
        userList.add(user1);
        userList.add(user2);
        return userList;
    }
}

在这里插入图片描述

Redis 中,hash 和 list 分别用于不同的数据存储需求。如果要将对象 list 存储hash 中,可以使用 Redis 的序列化功能将对象 list 转换为字符串后再存储hash 中。 在 Java 中,可以使用 RedisTemplate 的 HashOperations 接口进行 hash 操作,使用 Gson 序列化工具将对象 list 转换为字符串。以下是将对象 list 存储hash 中的示例代码: ```java // 准备要存储对象 list List<MyObject> objList = Arrays.asList( new MyObject("obj1", 1), new MyObject("obj2", 2), new MyObject("obj3", 3) ); // 将对象 list 转换为字符串 String objListStr = new Gson().toJson(objList); // 获取 HashOperations 对象 HashOperations<String, String, String> hashOps = redisTemplate.opsForHash(); // 存储对象 list 字符串到 hashhashOps.put("hashKey", "objListField", objListStr); ``` 以上代码将对象 list 转换为字符串后,通过 hash 的 put 方法存储在 "hashKey" 这个 hash 中的 "objListField" 字段中。如果需要获取这个对象 list,可以通过以下代码进行反序列化: ```java // 获取 hash存储对象 list 字符串 String objListStr = hashOps.get("hashKey", "objListField"); // 将对象 list 字符串反序列化为 List<MyObject> List<MyObject> objList = new Gson().fromJson(objListStr, new TypeToken<List<MyObject>>(){}.getType()); ``` 以上代码通过 hash 的 get 方法获取到存储在 "hashKey" 这个 hash 中的 "objListField" 字段的值,然后通过 Gson 序列化工具将其反序列化为 List<MyObject> 对象。需要注意的是,MyObject 类需要实现序列化接口(Serializable 或 Parcelable)才能进行序列化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡^泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值