PHP针对联合主键缓存的坑

问题:对于PHP来说,基于hash结构的array是万能的,因此在设计表的抽象的时候,用$pk = array('field1', 'field2');这样的语句来设置主键。在需要存入Redis时,将$pk用某种形式展开成字符串作为Key存入Redis。但是在实际过程中,总是出现缓存找不到的情况。
定位调试了很长时间,找到原因如下:
在针对联合主键查询时,以右边的方式传递联合主键的参数:$object->get(['field1' => 'value1', 'field2' => 'value2']);
这种写法是比较随意的,也就是说,有可能两个字段写倒了。对于数据库操作层展开成WHERE以后,虽然也要进行对数组进行foreach遍历展开成WHERE field1='value1' AND field2='value2',但是WHERE后面的顺序怎么写,对实际结果并没有影响。不过在展开成redis的key的过程中,由于必须按照一定顺序,如果给的主键数组的排序不一样,生成的key自然就不一样了,结果自然导致找不到了。
解决方案:在每次取缓存之前,使用ksort或者krsort进行针对数组key的排序。

你可能感兴趣的:(PHP,项目总结)