한 명령으로 인해 수백만 달러의 손실이 발생했습니다.
코드가 표준화되어 있지 않아서 동료들이 눈물을 흘렸습니다. 코딩할 때 주의하세요!
궁금해서 테스트해 보겠습니다. 무엇이 문제인가요?
스크립트 파일을 작성합니다.
for((i=1;i<=10000000;i++)); do echo "set k$i 哪吒编程$i" >> /tmp/test1.txt;done;
작성 성공 여부는 /tmp/test1.txt
를 통해 확인하세요. /tmp/test1.txt
查看一下是否写入成功。
cat /tmp/test1.txt | redis-cli -a 111111 --pipe
在redis.conf文件中配置security:
rename- command keys "" rename- command flushdb "" rename- command flushall ""
Redis Scan 命令用于迭代数据库中的数据库键。
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
scan语法:
SCAN cursor [MATCH pattern] [COUNT count]
阿里云Redis开发规范中明确规定“拒绝bigkey(防止网卡流量、慢查询)”
。
String类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。
String类型的用del删除。
其它类型使用hscan、sscan、zscan方式渐进式删除,同时要避免bigkey过期时间自动删除问题,因为它会造成主线程阻塞。
Hash 删除: hscan+hdel
public void delBigHash(String host, int port, String password, String bigHashKey) { Jedis jedis = new Jedis(host, port); if (password != null && !"".equals(password)) { jedis.auth(password); } ScanParams scanParams = new ScanParams().count(100); String cursor = "0"; do { ScanResult<Entry<String, String>> scanResult = jedis.hscan(bigHashKey, cursor, scanParams); List<Entry<String, String>> entryList = scanResult.getResult(); if (entryList != null && !entryList.isEmpty()) { for (Entry<String, String> entry : entryList) { jedis.hdel(bigHashKey, entry.getKey()); } } cursor = scanResult.getStringCursor(); } while (!"0".equals(cursor)); //删除 bigkey jedis.del(bigHashKey); }
内存不均,集群迁移困难;
超时删除,阻塞线程;
网络流量阻塞;
(1)通过redis-cli --bigkeys
2. Redis에 입력 1천만 데이터 쓰기
rrreee
3. 키를 통해 1,000만 개의 데이터 보기 *
🎜🎜4. 구성 파일을 통해 키* 사용을 금지합니다.🎜🎜redis.conf 파일에서 보안을 구성합니다.🎜rrreee🎜3. keys*🎜🎜Redis Scan 명령은 데이터베이스 데이터베이스 키의 키를 반복하는 데 사용됩니다. 🎜🎜SCAN 명령은 호출될 때마다 새 커서가 사용자에게 반환됩니다. 사용자는 다음 반복에서 이 새 커서를 SCAN 명령의 커서 매개 변수로 사용해야 합니다. 이전 반복 프로세스. 🎜🎜SCAN은 두 요소를 포함하는 배열을 반환합니다. 첫 번째 요소는 다음 반복을 위한 새 커서이고 두 번째 요소는 반복되는 모든 요소를 포함하는 배열입니다. 새 커서가 0을 반환하면 반복이 종료되었음을 나타냅니다. 🎜🎜스캔 구문: 🎜rrreee🎜🎜🎜4. Bigkey 거부🎜🎜1. Alibaba Cloud Redis 개발 사양🎜🎜Alibaba Cloud Redis 개발 사양에는"Reject bigkey(네트워크 카드 트래픽 방지 및 쿼리 속도 저하를 위해)"
가 명확하게 규정되어 있습니다. 🎜🎜문자열 유형은 10KB 이내로 제어되며, 해시, 리스트, 세트, zset 요소의 개수는 5,000개를 초과할 수 없습니다. 🎜🎜2. 빅키가 나타나면 어떻게 삭제하나요? 🎜redis-cli --bigkeys
를 통해 검색하세요. 🎜🎜🎜🎜🎜(2) 각 키 값의 바이트 수를 계산하고 메모리 사용량 키를 통해 알아냅니다.🎜🎜🎜🎜위 내용은 Redis bigkeys 명령 차단 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!