关于使用Redis的项目小坑

今天刚接受一个公司的抽奖活动的小项目,其中涉及到一个redis的问题,我们知道redis命令在使用的时候最多的就是返回0或者1或者其他的比如(nil),今天排查了好久,就是一个关于从redis里面拿用户唯一标志的,之前的人再写代码的时候不小心用了Long的equlas()方法,用一个等于1的Long去和返回redis命令的返回结果比较,导致最后一直返回false,从redis数据库里面也是没有这个key,导致问题一直定位在redis缓存没有及时同步上,项目有很赶着实很苦逼。下面附上代码供自己反思:

 public boolean getOpenId(final String key){
        JedisCallable<Boolean> call = new JedisCallable(){

            @Overrid
            public Boolean callable(Jedis instance){
                Long flag = 1;
                int i = instance.Hget(key);
                if(flag.equals(i)){
                    return true;
                }
                return false;
            }
        }
    }

我们进入源码可以发现:Long的equals方法是这样子的

 public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }

很坑爹吧。这种问题一般很容易就被忽略了,尤其实在测试的时候一个小小的忽略,导致bug定位的失误会白白花费很多时间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【本教程目录】 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动r...
    徐猿猿阅读 1,880评论 0 35
  • 超强、超详细Redis入门教程 转载2017年03月04日 16:20:02 16916 转载自: http://...
    邵云涛阅读 17,516评论 3 313
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,286评论 23 625
  • 很好的UI动画提示 让我们看一些UI动画由一般到卓越的例子,通过不断地调整,你可以用动效来提升你的设计水平。动效交...
    Trmachel阅读 511评论 1 2
  • 《彼尚老师分享》 你是完美的,不需要做任何事情证明你是完美的 你只能创造自己的生活,无法创造别人的生活 每个人在他...
    李素玲_9c4a阅读 450评论 0 1