在做列表数据分页的时候,是将数据存储在redis的有序集合中实现的
核心代码如下
|
|
问题
在进行翻页的时候,传入start=10,size=10,没有获取到新一页的数据,而是返回有序集合所有的数据
排查过程
排查命令是否写错
注:「将start和size写成定值」
|
|
数据正常返回,排查传参问题
打印start,size
|
|
结果出乎意料,start,size传入没有问题
可是传入的都是page=10,size=10
为什么两种方式的结果会不一样,redis最终执行的是什么命令呢?
查看redis最终执行的命令
在服务器用tcpdump抓取redis的网络包
注:「在开发服务器执行tcpdump命令;redis端口为6379」
|
|
当走传参的方式的时候,最终redis执行的命令是这样的
|
|
可以看出传输的redis的命令为
|
|
没有limit参数信息,当然会返回有序集合所有的数据
对比传入数据后发现:
定值的时候传入的是数字类型,传参的方式传入的是字符串类型
猜测是因为php连接redis的拓展的问题
当传入的start,size参数为字符串类型的时候会被过滤掉
为什么要这样做呢,难道是redis不支持吗
测试后发现redis是支持的
愉快的将参数做了类型转换,问题得到解决
最后也没忘记给phpredis提了一个issue
「注:phpredis的版本为3.0.0」
后记:在tcpdump使用的时候,也可以用来查询执行的MySQL语句
比如说,当我需要去熟悉一个新业务或者排查bug的时候,我会将该业务的sql语句都抓取出来
命令如下
|
|
感兴趣的朋友可以试试