[QUESTION] 这边有一个严重的使用规范,缓存删除的时候用 scan,并且在同步接口上面
Closed this issue · 2 comments
MotingGo commented
Before you submit this issue, you has been search all existed issues and search the documentation
- [✅] I've been search all existed issues
- [✅] I've been read all documentation
Describe your question
前提:
- 使用版本 v2
- 最初遇到的问题是,线上环境添加菜单、角色的时候都接口超时,预计要3~4分钟,而线下环境没这个情况
- 线上环境:redis 是一个大实例共用的服务,有很多微服务都会共用一个redis 期间会用 前缀、db进行隔离
- 线下环境:同线上一样,一个redis实例,docker 部署的
详情
- 问题点是:配置项目的redis的时候使用了默认的 db:0,在删除缓存的时候 scan redis,key的数量有四百多万 ,导致接口直接无法返回
- 就算是给项目单独的 redis ,用了 scan 这种方法,还得去刻意控制 key 的数量,这样就本末倒置了
- 临时处理方案:配置一个新的 redis.db
- 优化建议:
- 不要简单粗暴使用 scan 方法,就算是独立 redis,都禁止在同步接口上面使用
- 像 loginInfo 这种比较分散的缓存,可以加一个管理 key 进行控制,比如新增一个 loginInfo:uerId_1 的时候,往 hash loginUserIds 里面新增一个来进行过渡,或者从数据库查询在线用户,进行批处理
原代码
vendor/xmo/mine-core/src/Aspect/DeleteCacheAspect.php
boring-cyborg commented
Thanks for opening your first issue here! Be sure to follow the issue template! 感谢您在这里反馈第一个问题!请务必遵循问题模板!