吧map转换成String存储到redis中

本文分享了在使用Redis进行Map<String, Object>类型数据存储时遇到的问题及解决方案。通过对比直接使用toString()方法和先转化为JSONObject再调用toString()的方法,指出了后者能有效避免错误发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做redis缓存时,需要将一个Map<String,Object>的对象转换为String对象存入redis,用的时候需从redis中取出来后并转为Map<String,Objcet>对象。

之前的做法直接就是Map对象的toString()存入redis,后面取出是就是用再转换为Map.

String转换为:JSONObject jsonobject = JSONObject.fromObject(str);
                rMap = (Map<String, Object>) jsonobject;

今天之前一切运行正常,本地还有服务器都测试过没问题,但是今天却报错了:

仔细排除原因发现不能直接将Map对象的toString()存入redis,而是应该转换为JsonObject后再调用toString()后存入redis,就正常了,多么不可思议又理所当然!

附:

    Map<String,Object> map=new HashMap<String,Object>();

    map.put("fff","fff");

   System.out.println(map.toString());

  JSONObject jsonObject=JSONObject.fromObject(map);

  System.out.println(jsonObject.toString());

输出的结果如下:


转载来源:https://blog.youkuaiyun.com/angelkeepmoving/article/details/52225002

### Java中使用Redis存储和获取Map类型数据的示例 在Java中,可以使用Spring Data Redis提供的`RedisTemplate`类来操作Redis中的Map类型数据。以下是详细的代码示例和说明。 #### 存储Map类型数据 通过`RedisTemplate`的`HashOperations`接口,可以方便地将Map类型的数据存储Redis中。以下是一个存储Map数据的完整示例[^2]: ```java import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import java.util.HashMap; import java.util.Map; public class RedisExample { private RedisTemplate<String, String> redisTemplate; public RedisExample(RedisTemplate<String, String> redisTemplate) { this.redisTemplate = redisTemplate; } public void storeMapData() { HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash(); // 创建一个Map对象并填充数据 Map<String, String> mapData = new HashMap<>(); mapData.put("key1", "value1"); mapData.put("key2", "value2"); // 将Map数据存储Redis中,指定键名为"myMap" hashOperations.putAll("myMap", mapData); } } ``` #### 获取Map类型数据 从Redis中获取Map类型的数据同样可以通过`HashOperations`接口实现。以下是一个获取Map数据的示例[^2]: ```java public void retrieveMapData() { HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash(); // 获取指定键的值 String value = hashOperations.get("myMap", "key1"); System.out.println("Value for key1: " + value); // 获取所有键值对 Map<String, String> allData = hashOperations.entries("myMap"); System.out.println("All data in myMap: " + allData); } ``` #### 使用Jedis直接操作Map数据 如果不想使用Spring Data Redis,也可以直接通过Jedis库操作Redis中的Map数据。以下是一个使用Jedis的示例[^3]: ```java import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import java.util.HashMap; import java.util.Map; public class JedisExample { private JedisPool jedisPool; public JedisExample(JedisPool jedisPool) { this.jedisPool = jedisPool; } public void storeAndRetrieveMapData() { try (Jedis jedis = jedisPool.getResource()) { // 存储Map数据 Map<String, String> mapData = new HashMap<>(); mapData.put("key1", "value1"); mapData.put("key2", "value2"); jedis.hmset("myMap", mapData); // 获取指定键的值 String value = jedis.hget("myMap", "key1"); System.out.println("Value for key1: " + value); // 获取所有键值对 Map<String, String> allData = jedis.hgetAll("myMap"); System.out.println("All data in myMap: " + allData); } } } ``` ### 注意事项 1. 在使用`RedisTemplate`时,需要确保配置了正确的序列化器,以避免存储和获取数据时出现格式问题。 2. 如果存储的是复杂对象而非简单的键值对,可以考虑使用JSON序列化工具(如Jackson或Gson)将对象转换为字符串后再存储Redis中[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值