批量删除 Redis 中的 keys 代码显示成功了,但是查看 Redis 中 key 依然存在

weixin_38082570 2019-09-18 04:01:16
第一次代码结构 (遇到的问题) 代码如下: $keys = app('redis')->keys(config('env.REDIS_PREFIX') . '*'); /* $keys输出如下: array:3 [▼ `0 => "m_branch_a:ea675b6b0bc6af7b00e25d4279d0447345e1eccd" 1 => "m_branch_a:permissions" 2 => "m_branch_a:globalConfig"` ] */ $status = app('redis')->del($keys); /* $status 输出值是:3 */ 以上代码正常执行,没有任何错误日志,但是查看Redis发现数据依然存在,请教一下大家,谢谢指点!!! 第二次修改代码结构(发现了"异常规律") 我测试找到了一个规律,具体代码如下: 规律一 使用dd()输出,Redis中的相关keys删除成功了。 规律二: 使用return redirect()->back();Redis中相关keys就删除不了,但是日志记录已经删除成功了,而且删除的状态也是>1的。 $keys = app('redis')->keys(config('env.REDIS_PREFIX') . '*'); if (empty($keys) || !is_array($keys)) { Session::flash('tipWarning', '1'); Session::flash('tipMsg', '(Redis中)暂无缓存数据.'); return redirect()->back(); } app('redis')->del($keys); //使用下面代码,直接使用dd() Redis中就正常删除了相关keys; dd('缓存清除成功,请手动刷新页面'); //使用下面代码,Redis中就没有删除成功相关keys; //return redirect()->back(); 我觉得很奇怪,不知道什么原因,请各位指点,谢谢了! redis laravel del keys
...全文
472 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38084861 2019-09-18
  • 打赏
  • 举报
回复
删除你传一个 array?
weixin_38089340 2019-09-18
  • 打赏
  • 举报
回复
:joy: 我脚得不是一个库
weixin_38099195 2019-09-18
  • 打赏
  • 举报
回复
use Illuminate\Support\Facades\Redis; //狀態更新,delete cache $redisKey = sprintf(config('redis-keys.users.balance'), $this->user_id, '*'); // $redisKey = " USER::BALANCE::1::* " $keys = Redis::keys(config('cache.prefix').':'.$redisKey); /* $keys = [ 0 => 'USER::BALANCE::1::test1', 1 => 'USER::BALANCE::1::test2', 2 => 'USER::BALANCE::1::test3' ] */ if ($keys) { Redis::del($keys); } 這樣可行 default redis connection ?
weixin_38102041 2019-09-18
  • 打赏
  • 举报
回复
我测试找到了一个规律,具体代码如下: 规律一: 使用dd()输出,Redis中的相关keys删除成功了。 规律二: 使用return redirect()->back();Redis中相关keys就删除不了,但是日志记录已经删除成功了,而且删除的状态也是>1的。 $keys = app('redis')->keys(config('env.REDIS_PREFIX') . '*'); if (empty($keys) || !is_array($keys)) { Session::flash('tipWarning', '1'); Session::flash('tipMsg', '(Redis中)暂无缓存数据.'); return redirect()->back(); } app('redis')->del($keys); //使用下面代码,直接使用dd() Redis中就正常删除了相关keys; dd('缓存清除成功,请手动刷新页面'); //使用下面代码,Redis中就没有删除成功相关keys; //return redirect()->back(); 我觉得很奇怪,不知道什么原因,请各位指点,谢谢了!
weixin_38104057 2019-09-18
  • 打赏
  • 举报
回复
不知道这个算不算是Laravel的bug?还是我解锁的方式有问题啊,貌似没有解决方案
weixin_38120554 2019-09-18
  • 打赏
  • 举报
回复
试试专门开一个api接口删除redis缓存,原接口请求删除redis缓存接口成功后,再使用return redirect ()->back ();
weixin_38134038 2019-09-18
  • 打赏
  • 举报
回复
我觉得这个应该就是bug,呵呵....至今没有发现解决方案
weixin_38137849 2019-09-18
  • 打赏
  • 举报
回复
我觉得应该不是bug, 我在laravel5.8版本测试了一下, 你是不是用了predis这个包啊,它是有自动加上前缀的 $redis =app('redis'); $redis->set('a', 1); $redis->set('b', 1); $keys=$redis->keys('*'); VarDumper::dump($keys); //删除时传入带前缀的key 删除失败 $status = $redis->del($keys); VarDumper::dump($status); //删除时传入不带前缀的key 删除成功 $status = $redis->del(['a','b']); VarDumper::dump($status); array:2 [▼ 0 => "laravel_database_b" 1 => "laravel_database_a" ] 0 2 在后面我测试了return redirect()->back();并没有出现删除不了的情况。

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧