Computer >> 컴퓨터 >  >> 프로그램 작성 >> Redis

Redis에서 대규모 세트 삭제

Redis에서 큰 개체 삭제가 느린 이유에 대해 자세히 알아보려면 이 빠른 개요를 읽어보세요.

Redis에서 큰 세트를 삭제하려면:

  1. 다른 Redis 클라이언트에서 세트가 즉시 "삭제"된 것처럼 보이도록 키 이름을 고유한 네임스페이스 키로 변경합니다.

  2. 비워질 때까지 집합에서 구성원을 작은 배치로 점진적으로 삭제합니다. 삭제 명령의 크기를 제한하여 서버를 너무 오랫동안 차단하지 않도록 합니다.

다음 코드는 Redis 연결 실패를 정상적으로 처리하지 않습니다. Redis 명령이 실패하고 예외가 발생하면 수동으로 정리해야 합니다.

의사 코드

# Rename the key
newkey = "gc:hashes:" + redis.INCR("gc:index")
redis.RENAME("my.set.key", newkey)

# Delete members from the set in batches of 100
cursor = 0
loop
  cursor, members = redis.SSCAN(newkey, cursor, "COUNT", 100)
  if size of members > 0
    redis.SREM(newkey, members)
  end
  if cursor == 0
    break
  end
end

루비

$redis = Redis.new

def delete_set(key)
  # Rename the key
  newkey = "gc:sets:#{$redis.incr("gc:index")}"
  $redis.rename(key, newkey)

  # Delete members from the set in batches of 100
  cursor = "0"
  loop do
    cursor, members = $redis.sscan(newkey, cursor, count: 100)
    $redis.srem(newkey, members) if members.size > 0
    break if cursor == "0"
  end
end

# Example:
#
#   delete_set("my.large.set")

다음은 백그라운드 작업 inRuby를 사용하여 위의 몇 가지 구현 예입니다.

  • 요청
  • 사이드키크

← "Redis에서 큰 개체 삭제"로 돌아가기