thinkPHP的数据缓存问题

本文描述了一个使用ThinkPHP框架的多用户环境下的查询问题,当两个不同角色的用户先后查询数据时,后查询的用户获取到了前者的缓存结果而非实时数据。问题最终定位为查询结果被错误地缓存,解决办法是在缓存中加入用户身份标识以确保数据隔离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天遇到的一个问题,即用两个浏览器登录不同的角色,然后请求同一个接口(根据角色不同给了不同的查询条件)进行数据查询,发现角色一查询数据之后,角色二去查数据时,拿到的是角色一查询过的数据。打印session没有串,查询条件也不一样,但问题是角色一查询的时候执行了查询语句,角色二查询的时候却没有执行查询语句。

一直很好奇角色二是如何没有通过执行查询语句而拿到数据,隐约觉得可能与缓存有关。于是把thinkPHP框架(3.12版)中有关于生成缓存的配置都关闭了,还是没有起到作用。(关于ThinkPHP关闭各种缓存的方法,大家可看看这个博客:http://blog.youkuaiyun.com/lovezbs/article/details/46492861)

最后让同事看的时候,惊奇的发现,不知哪位大神把查询的数据放在了S缓存里,第二次查询的时候就绕过了查询语句,直接从缓存数据里取的,这个坑埋的深呐!

最后的处理方式是,第一次查询的时候除了把数据放进S缓存里以外,还把用户信息也放进去,然后第二次查询的时候就比对一下当前用户与S缓存里的用户是否是同一个人,是的话就直接取缓存里的数据,不是的话就重新查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值