DefaultHashOperations multiget的一个坑
DefaultHashOperations的multiget如果没有数据会返回java.util.Collections.EmptyList,这个List没有重写add方法。
List<Long> resultIds=redisTemplate.boundHashOps(“key”).multiGet(ids)
resultIds在add一个新元素时,报了一下的错:
java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)at java.util.AbstractList.add(AbstractList.java:108)
原因:
org.springframework.data.redis.core.RedisTemplate#boundHashOps
public List<HV> multiGet(Collection<HK> hashKeys) {return ops.multiGet(getKey(), hashKeys);}
org.springframework.data.redis.core.DefaultHashOperations#multiGet
public List<HV> multiGet(K key, Collection<HK> fields) {if (fields.isEmpty()) {return Collections.emptyList();//这个list是java.util.Collections#emptyList中的java.util.Collections.EmptyList}final byte[] rawKey = rawKey(key);final byte[][] rawHashKeys = new byte[fields.size()][];int counter = 0;for (HK hashKey : fields) {rawHashKeys[counter++] = rawHashKey(hashKey);}List<byte[]> rawValues = execute(new RedisCallback<List<byte[]>>() {public List<byte[]> doInRedis(RedisConnection connection) {return connection.hMGet(rawKey, rawHashKeys);}}, true);return deserializeHashValues(rawValues);}
这个java.util.Collections.EmptyList没有重写add方法:
private static class EmptyList<E>extends AbstractList<E>implements RandomAccess, Serializable {private static final long serialVersionUID = 8842843931221139166L;public Iterator<E> iterator() {return emptyIterator();}public ListIterator<E> listIterator() {return emptyListIterator();}public int size() {return 0;}public boolean isEmpty() {return true;}public boolean contains(Object obj) {return false;}public boolean containsAll(Collection<?> c) { return c.isEmpty(); }public Object[] toArray() { return new Object[0]; }public <T> T[] toArray(T[] a) {if (a.length > 0)a[0] = null;return a;}public E get(int index) {throw new IndexOutOfBoundsException("Index: "+index);}public boolean equals(Object o) {return (o instanceof List) && ((List<?>)o).isEmpty();}public int hashCode() { return 1; }@Overridepublic boolean removeIf(Predicate<? super E> filter) {Objects.requireNonNull(filter);return false;}@Overridepublic void replaceAll(UnaryOperator<E> operator) {Objects.requireNonNull(operator);}@Overridepublic void sort(Comparator<? super E> c) {}// Override default methods in Collection @Overridepublic void forEach(Consumer<? super E> action) {Objects.requireNonNull(action);}@Overridepublic Spliterator<E> spliterator() { return Spliterators.emptySpliterator(); }// Preserves singleton propertyprivate Object readResolve() {return EMPTY_LIST;}}
DefaultHashOperations multiget的一个坑相关推荐
- 困扰多日的C#调用Haskell问题竟然是Windows的一个坑
最近一直被C#调用Haskell时的"尝试读取或写入受保护的内存"问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected ...
- SAP WM LT10事务代码的一个坑?
SAP WM LT10事务代码的一个坑? 执行事务代码LT10,试图将storage type SAM下物料库存的几个SU转入同一个货架上.Storage type SAM有启用SUM功能的. 执行, ...
- mysql div 没有小数,mysql order by limit 的一个坑
mysql order by limit 的一个坑 分页查询的时候遇到的坑: 发现的问题: 对单个无索引的字段进行排序后limit .发现当被排序字段有相同值时并且在limit范围内,取的值并不是正常 ...
- 移动端开发碰到一个坑
移动端开发真是不断踩坑,今天在做一个移动端的组件,又发现了一个坑,记录到日志里面,做个记录,以便以后再遇到这个问题有个记录可以参考. 在ios中的chrome浏览器中,手指从屏幕上方移动出屏幕(一定要 ...
- centos 升级mysql_CentOS 7下升级MySQL5.7.23的一个坑
发现CentOS 7下升级MySQL5.7.23的一个坑,以前面升级到MySQL 5.7.23的一个集群为例 在我们环境下打开文件描述符个数的参数open_files_limit在MySQL 5.6. ...
- 0705 - 说说 NSPopover 的一个坑
今天开发 iTips,遇到一个很诡异的问题:NSOutlineView 中的 NSTableCellView 中的 NSTextField,始终有一个背景色,无论怎么设置都无法去掉.如下图中左侧部分所 ...
- nodejs request module里的json参数的一个坑
今天工作的时候遇到一个坑,在客户端用nodejs给服务器发送HTTP请求,服务器老是报错:In the context of Data Services an unknown internal ser ...
- 记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑
我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来. 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的服务器上的服务.域名b上的服务也 ...
- centos mysql 升级 5.7_CentOS 7下升级MySQL5.7.23的一个坑
发现CentOS 7下升级MySQL5.7.23的一个坑,以前面升级到MySQL 5.7.23的一个集群为例 在我们环境下打开文件描述符个数的参数open_files_limit在MySQL 5.6. ...
最新文章
- 详解微服务技术中进程间通信
- sqlmap 跑access_sqlmap注入Access
- idea离线下载lombok,以及lobok版本不兼容
- 最小错误率贝叶斯决策
- ceph学习之pool
- Js对象如何添加方法、查看Api
- Python并发机制的实现(一)——多进程
- 数论知识(2)-------------欧拉函数
- 北美电影票房Top10-2019年12月27日:《小妇人》表现亮眼
- oracle静默安装集群,Oracle RAC 静默安装实践
- eclipse的复活
- 2019 CSDN博客之星第三名,感谢各位支持
- Navicat 连接数据库报错:1045-Access denied for user ‘root‘@‘localhos
- 办理物联网卡不实名会有什么后果呢
- 公司内局域网访问接口
- maven surefire的executions配置
- 从表征到行动---意向性的自然主义进路(续二)
- 计算机核心刊物投稿心得
- 微信公众号开发——现金红包、企业付款
- 【MSAR】当机器学习遇到计算机视觉——下篇