memcached 저장소 옵션을 사용하여 활성 세션 수를 계산하는 가장 직접적이고 안전한 방법을 알아 내려고합니다. DB 기반 세션 저장을 사용하면 테이블의 행 수를 계산할 수 있지만 memcached를 사용하여 동일한 작업을 수행 할 수는 없습니다.레일스 - 활성 세션 목록
덕분에, 크람
memcached 저장소 옵션을 사용하여 활성 세션 수를 계산하는 가장 직접적이고 안전한 방법을 알아 내려고합니다. DB 기반 세션 저장을 사용하면 테이블의 행 수를 계산할 수 있지만 memcached를 사용하여 동일한 작업을 수행 할 수는 없습니다.레일스 - 활성 세션 목록
덕분에, 크람
난 당신이 memcache에와 있다고 할 수 있다고 생각하지 않습니다.
필자는 아직 MemCacheStore를 사용하고 있지만 데이터베이스의 cron 작업과 테이블이있는 응용 프로그램 컨트롤러의 필터를 사용하여 구현할 수 있습니다.
Memcache는 명시 적으로 사용중인 키를 반복하는 방법을 제공하지 않습니다. 특정 키를 기준으로 읽거나 쓸 수 있지만 이 아닌 키를 모두 가져 오거나 반복 할 수 있습니다. 이것은 memcache의 한계입니다.
불행히도 before_filter
은 앱에 대한 알림없이 memcached에서 세션이 만료 될 수 있기 때문에 작동하지 않습니다.
왜이 정보를 얻고 싶습니까?
나는이 게시물이 정말로 오래되었음을 알고 있지만 여기에 잠재적 인 해결책을 추가하고 어떤 종류의 의견이 커뮤니티에서 왔는지 보았습니다.
우리는 조각 캐싱 (및 다른 것들)을 위해 memcached를 사용하기 때문에 세션을 memcached로 옮길 것을 고려하고 있습니다. 이 방법은 내 컴퓨터에서 작동하지만 코드를 정리하고보다 강력한 환경에서 테스트 할 기회가 없습니다.
해결책은 간단합니다. 그것은시 : 분을 기준으로 키를 사용하고 세션이 확장 될 때 키를 증가/감소시킵니다. 세션이 들어온 버킷 (키)이 반환되어 세션에 저장됩니다. 세션이 다음에 앱에 도달하면 이전 버켓이 count 메소드에 제공됩니다. 세션 키 사이를 이동할 수 있습니다 그 방법은 (새 버킷 이전 버킷에서 이동) 여기
은 방법 :def count(previous_bucket)
# All this does is construct a key like this:
# _session_counter_10:15
key = KEY_PREFIX + time_key(Time.now.hour, Time.now.min)
# do nothing if previous bucket = key
return key if previous_bucket.present? && key.eql?(previous_bucket)
# Increment the count in the cache
Rails.cache.increment(key, 1, expires_in: 30.minutes)
# If there is a previous bucket, decrement the count there
if previous_bucket.present?
Rails.cache.decrement(previous_bucket, 1)
end
# Return the key used so it can be stored in the session which was counted. This will be returned on the next
# call to bump to keep the numbers accurate
return key
end
사용하려면, 호출 방법은이 일을한다 :
counter = SessionCounter.new
session[:counter_bucket] = counter.count(session[:counter_bucket])
주어진 시간대에 세션 수를 얻으려면, 해당 기간 동안 키 배열을 구성한 다음 read_multi를 사용하여 그 시간의 카운트를 검색하면됩니다. 예를 들어
:
keys = ["_session_count_10:15","_session_count_10:14","_session_count_10:13"]
values = Rails.cache.read_multi(*keys)
값은 일치하는 키를 포함하는 해시이다. 키의 값을 합하여 해당 기간의 카운트를 얻으십시오.
질문 :
업데이트 : 우리는이 패턴을 구현 및 생산에 넣어 한
. 그것은 우리를 위해 정말 잘 진행되어 왔고 성능 문제는 아직 나타나지 않았습니다.
안녕하세요, 답변 해 주셔서 감사합니다. 이 정보를 통해 로그인 여부에 관계없이 사이트의 사용자 수를 표시하고 싶습니다. Vikram –