java hincrby_挖坑记录-redistemplate hincrby
浏览数业务
使用了redis
spring中的RedisTemplate
增加浏览数量//简单的获取浏览数量,然后加一
Long previewNumber = getPreviewNumber(sourceId, previewType);
String key = getKey(previewType, sourceId);
previewNumber = previewNumber < 0 ? 0L : previewNumber + 1;
redisTemplate.opsForHash().put(PRIVIEW_KEY, key, previewNumber);
获取浏览数 //获取缓存数量,不存在,设置为-1
private Long getCacheNumber( Map map, PreviewType previewType,Object sourceId){
String key = getKey(previewType, sourceId.toString());
Long number = map.get(key);
return null == number ? -1 :number;
}
//获取如果cacheNumber小于0
Long cacheNumber = getCacheNumber(map,previewType, sourceId);
if (cacheNumber < 0) {
cacheNumber = 0L;
Preview preview = previewDao.getPreview(previewType.getCode(), sourceId);
if (null != preview) {
number = preview.getNumber();
//缓存不存在,数据库存在, 添加缓存
hashOperations.put(PRIVIEW_KEY, getKey(previewType, sourceId), number);
} else {
//没有浏览记录,增加缓存为 0的记录
hashOperations.put(PRIVIEW_KEY, getKey(previewType, sourceId), number);
}
}
return cacheNumber;
这什么烂代码!是的,改下,起码用redis 的 increment 来做增加数量
开始给自己挖坑
做了简单的修改
Long number = redisTemplate.opsForHash().increment(THUMB_UP_KEY, getKey(previewType, sourceId), 1);
error
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR hash value is not an integer 调用个简单的方法也报错?
debug
jedis直接调用了redis的hincrby命令,没什么可说的。
然后直接调用getIntegerReply获取redis服务器返回的信息
直接是minus_byte类型
抛出了异常,发生了什么?
找到了如下资料
应该是和序列化有关系的。 使用redis 会配置对应的key和value序列化方式。
例如:
RedisTemplate temp = new RedisTemplate();
temp.setKeySerializer(new StringRedisSerializer());
temp.setValueSerializer(new StringRedisSerializer());
但是不应该啊,存储到redis使用什么序列化方式,获取时肯定是用对应方式反序列化嘛, 问题应该不是出在这里。
代码注意到这里
spring直接调用了connection,并没有对delta进行序列化操作,接着点进去看到,
jedis提供的connection直接转换成String,然后使用String的getBytes();方法
然后看了下对应key再redis的数据
搞了个新key
原因很明显了
increment 会直接对值进行做增加操作,不会使用对应的redistemplate中设置的序列化方式
原来redis中的旧数据是通过redisTemplate.opsForHash().put进去的,会先通过设置的序列化方式进行序列化,
后面对key进行increment redis没办法对应value转成long进行操作,所以返回了ERR hash value is not an integer异常信息。
删除旧数据就可以了吧。
清空redis数据后 //这里出现了异常
hashOperations.entries(PRIVIEW_KEY)
org.springframework.data.redis.serializer.SerializationException: fst-deserialization-error; nested exception is java.io.IOException: java.lang.NullPointerException
原因和上面大同小异,这里获取的时候依然会进行序列化操作,而且increment设置的值是没有进行对应序列化的。这里是FST 进行反序列化时异常。
总结
increment使用要避免和其他需要经过序列化的操作混用。
对用到的东西要有全面的了解,才能避免各种坑。
为什么会这么累,就是喜欢给自己挖坑。
本文来自网易实践者社区,经作者张昌路授权发布。
java hincrby_挖坑记录-redistemplate hincrby相关推荐
- Java设计模式学习记录-解释器模式
前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以 ...
- 一起初学java,笔记记录的第五天:数组、排序和查找
一起初学java,笔记记录的第五天:数组.排序和查找 适用于初学java者 这个首先指出本文中图片和资源来自**韩顺平**老师,感谢老师做的无私奉献的教学! 1. 数组介绍 数组可以存放多个同一类型的 ...
- 已知挖坑记录(不知道什么时候才填)
挖坑记录 前言 一.区块链安全 1.基于区块回滚的攻击 2. 二.架构设计 1.数据中台方面 2.大数据应用方面 3.云边融合方面 三.自己瞎捣鼓的Relax框架相关 1.消灭Service层 2.消 ...
- Redis的Java客户端——SpringDataRedis、RedisTemplate、StringRedisTemplate
目录 一.初步了解SpringDataRedis 1.1 特点: 二.快速入门SpringDataRedis 2.1 引入依赖 2.2 配置文件 2.3 注入RedisTemplate 2.4 编写 ...
- NWJS 调用java问题处理记录
NWJS 调用java问题处理记录 有关NWJS调用JAVA安装与发布运行时的问题: 1:确认nwjs使用的版本(x86或x86-64)与本机使用的node版本一致. 2:提示Error: Canno ...
- 2019个人Java实习生面试记录
2019个人Java实习生面试记录 第一次: 1.sql排序语句 2.对框架的理解 3.说一下对Spring的理解 4.说一下对mvc的理解 第二次 5.&与&&的区别 6.S ...
- java hincrby_使用Redis构建文章投票网站(Java)
文章投票网站的redis相关Java实现 需求: 1.要构建一个文章投票网站,文章需要在一天内至少获得200张票,才能优先显示在当天文章列表前列. 2.但是为了避免发布时间较久的文章由于累计的票数较多 ...
- java通用日志记录_JAVA实现通用日志记录方法
前言: 之前想在filter层直接过滤httpServerletRequest请求进行日志处理,但是之后再getWriter()的 时候报already been call异常.查了下,才发现原来流形 ...
- Java中的记录类型
2020年3月发布的JDK 14引入了记录 (预览语言功能),这些记录提供了一种紧凑的语法来声明主要用于保存数据的类. 在记录中 ,所有低级,重复且容易出错的代码都类似于构造函数,访问器和通用方法,例 ...
最新文章
- php网页添加图片的代码,天天查询-PHP版的kindeditor编辑器加图片上传水印功能
- Zabbix如何实现Server和Agent的通信加密
- keep健身软件电脑版_一款不错的健身软件keep会员实现教程
- C#3.0扩展方法[转]
- 【C语言】实参求值的顺序
- BZOJ2460: [BeiJing2011]元素(线性基+贪心)
- Windows 7 下 PHP 开发环境搭建(手动)
- [原创]数据库视图介绍和使用
- linux卸载qt5.6.2,请问该怎么把linux的Qt升级为5.6?
- 2016年农民工监测调查报告(zz)
- 关于T—SQL与SQL企业管理器
- 虚幻引擎与现代C++:转移语义和右值引用
- 学了 C 语言到底能做什么, 能从事什么工作?(附课程)
- linux基础操作--参考狂神说
- iOS音视频播放-AVPlayer简单使用
- xp远程登录linux,Linux操作系统下如何远程登录XP桌面
- C# DataView常见操作
- 无法安装64位版本的office解决方案
- 送一台高清显示器(控制人数,限时删)
- Esri总裁用96页PPT告诉你GIS的未来将如何发展,而我们又该为此如何准备
热门文章
- Linux创建新用户和key登陆
- 手机可以玩python吗_在手机上玩python编程-Pydroid3
- 中山大学计算机研究生专业课考什么,2021中山大学考研专业的考试科目有变吗_21中大考研哪些初试笔试科目变了-聚创考研网...
- 计算机组成原理——万字详解
- 如何修复带有问号错误的 Mac 文件夹
- python找人_Python爬虫实现全国失信被执行人名单查询功能示例
- [免费下载应用]iNeuKernel.Ocr 图像数据识别与采集原理和产品化应用
- TI ARM 性能天梯图
- html+form+提交json数据,form表单提交json格式数据
- 在线sqli-labs 通关大全 Less-1