接触过数据库的同学,想必都有听过或者用过Redis这个K-V数据库。今天我们来聊下Redis中容易犯的错误。
通常我们在做排行榜的时候,会使用Redis里的zset数据结构,让Redis帮我们完成排序,可以节省了很多开发工作。但是在取数据的时候我们就容易犯错。
假设现在Redis里存储了一个排行榜如下。键名为c。包含以下数据。
因为Redis已经帮我们排好序,我们只需调用zRevRank(key,member)即可拿到member在key中按照分数从大到小的排名。
从上面我们可以看出,rank是从0开始,所以往往大家都会这样写
redis->zRevRank(key,member)+1;
如果你这样写,你还活着的话赶紧买张火车票跑吧,站票也行。
因为如果用户进入了这个排行榜,这样的用户没错,但是如果用户没进入排行榜的时候,redis->zRevRank(key,member)取出来的结果是null,再加1的话,程序会把null转换成整形0,去加1得到的结果就是1。那么不在排行榜的人的名词都是第一名。天呐,想想都有点激动了。那么正确写法是怎样的?欢迎在评论区讨论。