[REDIS] Laravel - 지우기 모든 캐시 / 특정 문자열이 포함 된 키를 레디 스
REDISLaravel - 지우기 모든 캐시 / 특정 문자열이 포함 된 키를 레디 스
그것은 특정 문자열과 일치 Laravel을 사용하여 레디 스에있는 모든 키를 삭제할 수 있습니까? 나는 단어 제품을 가지고 키를 잊지하기를 원한다면 예를 들어, 다음과 같은 키를 잊어 버린 것입니다 :
laravel : 896235872385237588327582370375acaca235325 : 제품 목록 laravel : 896235872385237588327582370375acaca235325 : 제품 범주
직접 Laravel을 통해 실행할 수 있습니다 더 나은 아무것도가 있다면 나는 레디 스 서버에서이 작업을 실행하는 것입니다하지만 난 궁금하네요 :
레디 스-CLI 키 "*"| 그렙 "제품"| xargs를의 레디 스-CLI DEL
해결법
-
==============================
1.왜 :
왜 :
public function forget($key_name) { $redis = Cache::getRedis(); $keys = $redis->keys("*$key_name*"); $count = 0; foreach ($keys as $key) { $redis->del($key); $count++; } return $count; }
생산 환경 커서 SCAN [MATCH 패턴 [COUNT 카운트]은 "키"대신에 사용되어야
http://redis.io/commands/scan
당신이 경우에 메모리가 부족하지 않기 때문에 당신은 레디 스에서 수천 키의 수만을 가지고, 당신은 "키"를 사용하여 전체 레디 스 인스턴스를 차단하고 싶지 않아요.
-
==============================
2.이 키 대신 스캔을 사용하여 대안입니다. 필요한 경우 재귀 함수로 변환 주시기 바랍니다.
이 키 대신 스캔을 사용하여 대안입니다. 필요한 경우 재귀 함수로 변환 주시기 바랍니다.
public function forgetWildcard(string $pattern, int $maxCountValue = 1000) { $redis = Cache::getRedis(); $currentCursor = '0'; do { $response = $redis->scan($currentCursor, 'MATCH', $pattern, 'COUNT', $maxCountValue); $currentCursor = $response[0]; $keys = $response[1]; if (count($keys) > 0) { // remove all found keys $redis->del($keys); } } while ($currentCursor !== '0'); // finish if current Cursor is reaching '0' }
힌트 : $ this-> getPrefix () '*'.이 접두사 Laravel을 위해 일하게 나는 다음과 패턴을 교체했다 $ 패턴.
-
==============================
3.내가 할 수있는 방법 알아 냈어 그래서 - 너무 자주하고 싶지 뭔가를이 키가 명령 레디 스를 사용하기 때문에 :
내가 할 수있는 방법 알아 냈어 그래서 - 너무 자주하고 싶지 뭔가를이 키가 명령 레디 스를 사용하기 때문에 :
public function forget($key_name) { $redis = Cache::getRedis(); $keys = $redis->keys("*"); $count = 0; foreach ($keys as $key) { if (strpos($key, $key_name)) { $redis->del($key); $count++; } } return $count; }
from https://stackoverflow.com/questions/35074418/laravel-erase-all-cache-redis-keys-that-contain-a-specific-string by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 왜 레디 스에 대한 비동기 클라이언트를 사용하는 의미가 무엇입니까? (0) | 2020.01.20 |
---|---|
[REDIS] Jedis 연결을 가져올 수 없습니다; 풀에서 리소스를 가져올 수 없습니다 (0) | 2020.01.20 |
[REDIS] ActionCable : 사용자 당 하나 개의 채널 (0) | 2020.01.20 |
[REDIS] 연결에 ElastiCache 클러스터를 통해 Node.js를 (0) | 2020.01.20 |
[REDIS] 레디 스에서 유니 코드를 저장하지만, 가져 오기 오류 (0) | 2020.01.20 |