Laravel Redis 前缀清除

Laravel Redis 前缀清除

通过统计网站看到很多人进来搜索词意思是要设置前缀,而不是清除指定前缀的内容,专门追加了这块内容。

设置存储前缀

方法一、

.env

1
REDIS_PREFIX=null

方法二、

config\database.php

1
2
3
4
5
6
7
'redis' => [
...
'options' => [
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
// 修改为
'prefix' => '',
],

如果修改后没有修改记得清除配置缓存

1
$ php artisan config:clear

清除指定前缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use Illuminate\Support\Facades\Redis;

if(!function_exists('redis_clear')) {
/**
* Redis 清除(遍历版)
*
* @param string $prefix 前缀
* @return bool
*/
function redis_clear($prefix) {
$keys = Redis::keys($prefix . ':*');

$_prefix = config('database.redis.options.prefix');

foreach($keys as $key) {
Redis::del(str_replace($_prefix, '', $key));
}

return true;
}

/**
* Redis 清除(管道版)
*
* @param string $prefix 前缀
* @return bool
*/
function redis_clear($prefix) {
$keys = Redis::keys($prefix . ':*');

$_prefix = config('database.redis.options.prefix');

$keys = array_chunk($keys, 1000);

foreach($keys as $_keys) {
Redis::pipeline(function($pipe) use($_keys, $_prefix) {
foreach($_keys as $key) {
$pipe->del(str_replace($_prefix, '', $key));
}
});
}

return true;
}
}

对两个版本进行测试,对相同 10W 条数据进行删除,遍历版耗时 15 秒,管道版耗时 1.6 秒,差不多十倍的差距。

往上