루비 보안 탐색 Redis 사용 방법

지난주에 우리는 DEV를 위해 대형 데이터베이스 이전을 시작했습니다. 우리는 새로운 Redis 실례를 설정했습니다. 많은 우수한 공헌자들의 도움으로 기존의 캐시 키를 모두 이전하기 시작했습니다.나는 정말 흥분해서 우리를 Redis로 옮겼다. 왜냐하면 Memcache가 약간 블랙박스 같기 때문이다.그 안에 무엇이 있는지, 그리고 우리가 그것을 어떻게 사용했는지 말하기 어렵다.
따라서 Redis를 애플리케이션 캐시에 사용하기로 했습니다.Redis는 캐시를 사용하는 방법을 더욱 깊이 있게 이해하고 캐시 키를 더 많이 제어할 수 있도록 합니다.현재의 문제는 우리가 어떻게 이런 견해를 얻을 수 있느냐는 것이다.우리는 어떻게 책임감 있는 방식으로 모든 Redis 키를 선별하고 데이터베이스를 어떤 방식으로도 파괴하지 않도록 확보합니까?이것이 바로 내가 이 문장을 통해 너에게 가르쳐 주기를 바라는 것이다.

redisrb보석


우리의 응용 프로그램이 Redis와 상호작용을 할 수 있도록 하기 위해서 우리가 하는 첫 번째 일은 도입하는 것이다 redis-rb gem.이 gem은 루비를 통해 Redis와 대화할 수 있도록 합니다.Rails 응용 프로그램이 있기 때문에 Redis를 Rails 캐시로 실현하는 것이 더욱 쉬워지기 위해 gem를 사용하여 Redis 클라이언트에게 제공했습니다.
RedisRailsCache = ActiveSupport::Cache::RedisCacheStore.new(url: redis_url, expires_in: DEFAULT_EXPIRATION)
이것은 우리로 하여금 쉽게 레일을 교체할 수 있게 한다.새 RedisRailsCache 캐시 명령을 사용합니다.자, 이제 우리는 Redis와 이야기할 수 있습니다. 우리가 어떻게 이 점을 했는지 깊이 있게 토론합시다.

Redis 지표


많은 Redis 구현에는 메모리 소모, 연결, 출입 유량 등을 볼 수 있는 지표가 있습니다. 다음은 Heroku에서 Redis 계기판의 화면 캡처입니다.

이것은 우리에게 좋은 데이터를 주었지만, 우리가 어떤 키를 사용하고 있는지, 얼마나 오래 지났는지 등은 제대로 알려주지 않았다. 이 점을 더 이해하기 위해 명령줄과 레일스 컨트롤러로 넘어가자.

Redis Ruby 클라이언트


Ruby Redis 클라이언트를 사용하면 거의 모든 것을 액세스할 수 있습니다command that Redis implements.이러한 명령에 액세스하기 전에 먼저 Ruby 클라이언트를 설정합니다.gem의 Getting Started docs에 따라 당신은 두 가지 다른 방식으로 이 점을 실현할 수 있습니다.
# This assumes Redis was started with a default configuration and is listening on localhost, port 6379
redis = Redis.new  

# If you need to connect to a remote server or a different port
redis = Redis.new(host: "10.0.1.1", port: 6380, db: 15)

# You can also specify connection options as a redis:// URL:
redis = Redis.new(url: "redis://:[email protected]:6380/15")

# For our setup we can get it from our ActiveSupport::Cache::RedisCacheStore object like this
redis = RedisRailsCache.redis
Redis 클라이언트를 설치하면 원하는 Redis 명령을 실행할 수 있습니다.다음은 Redis 데이터베이스에서 키를 검색하고 탐색하는 데 유용한 명령입니다.

Redis 명령


메시지


이 명령은 Redis 데이터베이스에 대한 대량의 고급 정보를 제공합니다.이것은 산열을 출력할 것입니다. 다음은 키 목록입니다. 이 키들이 매우 유용하다는 것을 발견할 수 있습니다.대다수는 말하지 않아도 알지만, 나는 세부 사항을 보충할 것이다.
pry(main)>redis.info
=> {"redis_version"=>"5.0.5", 
 "uptime_in_days"=>"10", 
 "used_memory_human"=>"40.42M", # Current amount of memory in use/being taken up by key/value pairs
 "used_memory_peak_human"=>"41.96M", # The MAX memory you have hit since running Redis. 
 "total_commands_processed"=>"438487", # Total commands Redis has processed
 "rejected_connections"=>"0", # Number of connections rejected. If Redis has to execute a long-running command it might be forced to reject connections. Or if it gets more connection requests than it can handle
 "expired_keys"=>"2", # Number of keys that have expired
 "evicted_keys"=>"0",
 "keyspace_hits"=>"168937", # Number of hits when searching for a key, a hit means you searched for a key and found it in Redis
 "keyspace_misses"=>"268187", # Number of misses. A miss results when you search Redis for a key and it does not exist. Ideally, you want your hits to be much higher than your misses otherwise you likely are not getting much of a performance boost from Redis. We have some work to do at DEV ;)
 "db0"=>"keys=134091,expires=134091,avg_ttl=348733150"}
이제 우리는 우리의 Redis 데이터베이스를 어떻게 조감하는지 알게 되었다. 다음은 Redis의 어떤 키를 탐색하는지 이야기하고 싶다.

⚠️ 열쇠.⚠️


우선, 가장 중요한 것은 언제든지 어떤 생산 환경에서든지, 키 명령을 실행하기를 원하지 않는다는 것이다.다시 한 번 말씀드리지만 생산 중keys 명령을 실행하지 마십시오.

keys 명령은 Redis의 모든 키를 되돌려주거나 패턴과 일치하는 패턴을 전달할 수 있습니다.이 명령을 사용하면 키 그룹을 빠르게 찾는 데 유용하기 때문에 소형 로컬 환경에서 마음대로 찢을 수 있습니다.그러나 대형 Redis 데이터베이스에서 실행되면 성능이 저하됩니다.생산에서 일할 때 더 좋은 선택은 SCAN 이다.

스캔


SCAN iterates the set of keys in the currently selected Redis database.


이렇게 하면 Redis의 모든 키 주위를 안전하게 이동할 수 있습니다.다음은 Redis ruby 클라이언트에서 scan을 사용하는 방법의 예입니다."user"단어를 포함하는 모든 키를 찾으려면
# Set your client
redis = Redis.new

# Set a start value to tell Redis where to begin the scan 
start = 0
# Optional, if you want to track the total keys initialize a total value
total = 0

# Create an array to stick your "user" keys into
key_collection = []

# Scan through all of the keys selecting those that have "user" in them until you get back to the beginning
index, keys = redis.scan(start);
while index != "0"
  start = index
  total += keys.count
  keys.each do |key|
    key_collection << key if key.include?('user')
  end
  index, keys = redis.scan(start)
end
일단 열쇠 수조가 생기면, 이 수조로 네가 하고 싶은 일을 할 수 있다.이 키에 대해 알고 싶은 것은 만료 시간입니다. 다음 명령이 필요합니다.

TTL 회사


키를 검사할 때 사용할 수 있는 또 다른 좋은 명령은 ttl 입니다. 키를 검사할 때 만료된 시간을 볼 수 있습니다.TTL Redis에서 "생존 시간"을 나타내고 키가 만료되기 전에 생존해야 하는 남은 시간(초)을 되돌려줍니다.값 - 2는 키가 존재하지 않음을 나타내고, 값 - 1은 키가 만료되지 않음을 나타냅니다.
redis.ttl("user-key")

얻다


또 다른 검사 키의 기본 명령은 good oleget이다.get는 키의 값을 되돌려주고, 존재하지 않으면nil을 되돌려줍니다.
redis.get("user-key")
=> "user-key-value"

더 알고 싶으세요?


Redis는 당신이 원하는 명령을 찾을 수 있는 아주 좋은 command docs 세트를 가지고 있습니다.명령을 누르면, 명령이 무엇을 했는지 알려줄 뿐만 아니라, 예시 부분에서 이 명령을 실행할 수 있는 컨트롤러도 줄 것이다.

레디스 주변에서 재밌게 놀았어요!

좋은 웹페이지 즐겨찾기