当前位置: 首页 > news >正文

网站设计机构培训网站在线客服系统免费

网站设计机构培训,网站在线客服系统免费,免费app大全下载,企业网站管理系统破解版RedisTemplate 使用 pipeline 时需要注意的问题 RedisTemplate 使用 pipeline 进行批量 set 时,需要把 key 和 value 都转为字节 1. 直接使用 getBytes() 转为字节,在读取数据时,会抛出以下序列化异常 //错误代码 protected void process(…

RedisTemplate 使用 pipeline 时需要注意的问题

RedisTemplate 使用 pipeline 进行批量 set 时,需要把 key 和 value 都转为字节
1. 直接使用 getBytes() 转为字节,在读取数据时,会抛出以下序列化异常
//错误代码
protected void process(ReconRedisContext reconRedisContext) {String key = this.getLockKey(reconRedisContext);Pagination pagination = this.queryReconData(reconRedisContext);if (ObjectUtils.isNotEmpty(pagination)&& CollectionUtils.isNotEmpty(pagination.getList())) {List<?> resList = pagination.getList();redisTemplate.executePipelined(new RedisCallback<Set<?>>() {@Overridepublic Set<?> doInRedis(RedisConnection connection) throws DataAccessException {resList.stream().forEach(value -> {connection.sAdd(key.getBytes(StandardCharsets.UTF_8), value.toString().getBytes(StandardCharsets.UTF_8));});return null;}});}}// 抛出序列化异常
org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized token 'value': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
2. 需要使用 RedisTemplate 已经设置的 Serializer ,将key 和 value 序列化成byte数据,代码如下:
protected void process(ReconRedisContext reconRedisContext) {RedisSerializer keySerializer = redisTemplate.getKeySerializer();RedisSerializer valueSerializer = redisTemplate.getValueSerializer();String key = this.getLockKey(reconRedisContext);Pagination pagination = this.queryReconData(reconRedisContext);if (ObjectUtils.isNotEmpty(pagination)&& CollectionUtils.isNotEmpty(pagination.getList())) {List<?> resList = pagination.getList();redisTemplate.executePipelined(new RedisCallback<Set<?>>() {@Overridepublic Set<?> doInRedis(RedisConnection connection) throws DataAccessException {resList.stream().forEach(value -> {connection.sAdd(keySerializer.serialize(key), valueSerializer.serialize(value));});return null;}});}}
3. 异常原因:
// RedisTemplate 默认使用 DefaultSetOperations 存放数据的源码如下:
public Long add(K key, V... values) {byte[] rawKey = rawKey(key);byte[][] rawValues = rawValues((Object[]) values);return execute(connection -> connection.sAdd(rawKey, rawValues));
}byte[] rawKey(Object key) {Assert.notNull(key, "non null key required");if (keySerializer() == null && key instanceof byte[]) {return (byte[]) key;}return keySerializer().serialize(key);
}byte[] rawValue(Object value) {if (valueSerializer() == null && value instanceof byte[]) {return (byte[]) value;}return valueSerializer().serialize(value);
}

看源码,RedisTemplate 也是把 key 和 value 都转为了字节,但是使用了我们自己设置的 Serializer ,所以,我们在使用 pipeline 时,也需要使用我们设置的 Serializer。

注意:根据源码来看,Redis 的其他数据结构,使用 pipeline 时,也会存在序列化的问题,在代码编写的时候,需要注意。
源自

http://www.mmbaike.com/news/83032.html

相关文章:

  • 以企业介绍为主做外贸网站好吗技术培训班
  • 福田网站建设网络营销推广策略
  • 公司做的网站过期了免费网页制作平台
  • 网站建设的几大要素cba最新消息
  • 调试网站解析域名影响广州谷歌seo
  • 南宁刚刚发生的事东莞seo软件
  • 网站空间合同最佳磁力搜索天堂
  • 网站手机端优化域名服务器地址查询
  • 什么叫门户网站seo综合查询怎么进入网站
  • 建立网站的服务器高端网站公司
  • 500做网站互联网平台有哪些
  • 网站建设名头最新国际新闻事件今天
  • 如何鉴定网站做的好坏最好的优化公司
  • 网站域名注册信息查询2022年新闻热点事件
  • 带搜索的下拉框网站seo搜索优化是什么意思
  • 小说网站建设吧微博营销推广策划方案
  • 品牌营销成功案例合肥百度网站排名优化
  • 西安做网站选哪家百seo排名优化
  • spring框架做网站东莞网络推广营销
  • 利用js做网站百度地图收录提交入口
  • 网站做哪些比较赚钱方法站长工具的使用seo综合查询运营
  • 专做外贸的网站企业网站怎么推广
  • 标识设计公司网站怎么在百度上发布广告
  • 网站上传虚拟主机吸引人的微信软文范例
  • 怀柔网站建设推广营销推广的主要方式
  • 毕节市生态文明建设网站搜索引擎优化策略应该包括
  • 高端手机网站建设百度竞价推广效果怎么样
  • 沈阳网站设计定制电子商务主要干什么
  • 网站后台管理系统登陆网站查询ip地址
  • javaweb社交网站开发线上推广策划方案