Redis存储时遇到的一些问题
项目中用的Redis集群,存储时封装的api,有个定时任务定时将数据插入到Redis中,然后就直接调用了封装好的api,结果我脑残用了setnx这个方法:
if (null==liveSeconds ) {
jcp.setnx(key, bos.toByteArray());
} else {
jcp.setex(key, liveSeconds, bos.toByteArray());
}
这里说明一下set()、setnx()、setex()的区别吧!
set ( key, value)
通过key,value键值对存入,如果key不存在则创建key并存入value值,如果key已存在,则删除掉旧的value,存入新的value,也就是key一样的覆盖value。
setex ( key,liveSeconds, value)
和 set ( key, value)存入一样,只不过加了过期时间,存入成功返回ok,liveSeconds参数不合法则返回错误。
setnx ( key, value)
通过key,value键值对存入,注意:**当且仅当 **key不存在则创建key并存入value值,如果key已存在则不作任何存储,就是该value值不会被新的value覆盖。
然后我用了setnx,定时任务一直跑就是数据不变,领导们找了一上午的问题,才知道是这个问题,虽然领导没说啥,但是自己心里还是很惭愧,毕竟领导一直在找问题连开会、评审什么的都推掉了。这次就记录一下,希望自己以后张点心。也希望能够帮助你们,别犯和我一样的错误。