루비 보안 탐색 Redis 사용 방법
따라서 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 ole
get
이다.get
는 키의 값을 되돌려주고, 존재하지 않으면nil을 되돌려줍니다.redis.get("user-key")
=> "user-key-value"
더 알고 싶으세요?
Redis는 당신이 원하는 명령을 찾을 수 있는 아주 좋은 command docs 세트를 가지고 있습니다.명령을 누르면, 명령이 무엇을 했는지 알려줄 뿐만 아니라, 예시 부분에서 이 명령을 실행할 수 있는 컨트롤러도 줄 것이다.
레디스 주변에서 재밌게 놀았어요!
Reference
이 문제에 관하여(루비 보안 탐색 Redis 사용 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/molly/how-to-safely-navigate-redis-with-ruby-j9l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)