• jedis.hmset()方法存<key, Map>,导致redis.clients.jedis.exceptions.JedisDataException: value sent to redis cannot be null异常问题


    需要存的Map对象结构类似于:

    Map result = new HashMap();
    
    result.put("a", "a");
    result.put("b", studentInfo);
    result.put("c", null);
    
    jedis.hmset("orgKey", result);
    

    异常信息:

    [error] application - jedis error
    redis.clients.jedis.exceptions.JedisDataException: value sent to redis cannot be null
    	at redis.clients.util.SafeEncoder.encode(SafeEncoder.java:28)
    	at redis.clients.jedis.Client.hmset(Client.java:184)
    	at redis.clients.jedis.Jedis.hmset(Jedis.java:704)
    	...
    

    打断点result也不为null,怎么报错不能为null呢,进入查看了源码方法才发现:

    public void hmset(final String key, final Map<String, String> hash) {
        final Map<byte[], byte[]> bhash = new HashMap<byte[], byte[]>(hash.size());
        for (final Entry<String, String> entry : hash.entrySet()) {
          bhash.put(SafeEncoder.encode(entry.getKey()), SafeEncoder.encode(entry.getValue()));
        }
        hmset(SafeEncoder.encode(key), bhash);
      }
    

    map的<key,value>的value不能为null

    解决办法(在此仅贴上我自己的方法,有更好的可以评论哟),换成mset()方法保存结果,把Map转为Json字符串的形式保存:

    jedis.mset(orgKey, JSONObject.toJSON(result).toString());
    
  • 相关阅读:
    值传递和引用传递
    tomcat配置默认目录
    oracle用户和表空间
    oracle组内排序
    tomcat参数修改
    easyui格式化复选框
    关于spring mvc时间类型绑定失败解决方法
    java web汉字传参的解决办法
    Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法
    Postman接口测试(一)安装以及使用
  • 原文地址:https://www.cnblogs.com/zys-blog/p/15043220.html
Copyright © 2020-2023  润新知