Hi,
I am analysis memcache. Hence would like to know whats the best client
for memcache. Have read a lot about memcache-client gem. Is that the
most popular and widely used one?
Also most of my queries are complex queries and i have used find_by_sql
for the same. Can i cache these results got from find_by_sql?
Thanks in advance.
After reading through a lot of blogs, everyone seems to say that
memcache-client seems to be faster and better.
I installed memcache-client-1.8.5.gem
And my configuration in environment.rb file is:
memcache_options = {
:compression => true,
:debug => false,
:namespace => “mem-#{RAILS_ENV}”,
:readonly => false,
:urlencode => false
}
memcache_servers = [ ‘127.0.0.1:11211’ ]
CACHE = MemCache.new(memcache_options)
CACHE.servers = memcache_servers
However, evrytime i do a get to memcache in the memcache console i see
it being retrieved, however i get error while displaying it.
The logs show :
MemCache::MemCacheError (Resource temporarily unavailable - ):
c:/jruby-1.5.1/lib/ruby/1.8/net/protocol.rb:116:in readuntil' app/controllers/application_controller.rb:102:indata_cache’
app/controllers/channel_members_controller.rb:27:in follows' c:/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:104:inservice’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:65:in run' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:173:instart_thread’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:instart_thread’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:95:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:ineach’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:23:instart’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:82:in `start’
Can anyone help what is happening?
Yani Y. wrote:
Hi,
I am analysis memcache. Hence would like to know whats the best client
for memcache. Have read a lot about memcache-client gem. Is that the
most popular and widely used one?
Also most of my queries are complex queries and i have used find_by_sql
for the same. Can i cache these results got from find_by_sql?
Thanks in advance.
Quoting Yani Y. [email protected]:
:namespace => “mem-#{RAILS_ENV}”,
:readonly => false,
:urlencode => false
}
memcache_servers = [ ‘127.0.0.1:11211’ ]
CACHE = MemCache.new(memcache_options)
CACHE.servers = memcache_servers
In my application, all I do is add the following line to
conf/environments/production.rb and restart the server:
config.cache_store = :mem_cache_store
I only cache in production, caching in development is too error prone, I
change something and am getting the incorrect cached result instead of
the new
corrected result.
The host and port defaults to 127.0.0.1:11211. Start here, when that
works,
get fancier, e.g.:
config.cache_store = :mem_cache_store, ‘127.0.0.1:11211’, {
:compression => true,
:debug => false,
:namespace => “mem-#{RAILS_ENV}”,
:readonly => false,
:urlencode => false
}
HTH,
Jeffrey
Hi,
What i did in my environment.rb file was created an instance of memcache
and assign it to a constant:
CACHE = MemCache.new(‘127.0.0.1’)
and then in my code something like this:
def data_cache(key)
unless output = CACHE.get(key)
output = yield
CACHE.set(key, output, 1.hour)
end
return output
end
Now the problem is i keep getting the error:
MemCache::MemCacheError (Resource temporarily unavailable - ):
c:/jruby-1.5.1/lib/ruby/1.8/net/protocol.rb:116:in readuntil' app/controllers/application_controller.rb:102:indata_cache’
app/controllers/channel_members_controller.rb:27:in follows' c:/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:104:inservice’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:65:in run' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:173:instart_thread’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:instart_thread’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:95:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:ineach’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:23:instart’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:82:in `start’
Please help
Quoting Yani Y. [email protected]:
What i did in my environment.rb file was created an instance of memcache
and assign it to a constant:
CACHE = MemCache.new(‘127.0.0.1’)
and then in my code something like this:
[snip]
Okay, that makes it clearer to me. I think you are starting two
instances of
the cache client and the second one fails because the first is already
present
and running. Try with just the
config.cache_store = :mem_cache_store
and comment out the rest.
Jeffrey
Forgot to mention :
I had the configuration :
config.cache_store = :mem_cache_store
in my specific environment file.
Still i was getting the above mentioned error
Yani Y. wrote:
Hi,
What i did in my environment.rb file was created an instance of memcache
and assign it to a constant:
CACHE = MemCache.new(‘127.0.0.1’)
and then in my code something like this:
def data_cache(key)
unless output = CACHE.get(key)
output = yield
CACHE.set(key, output, 1.hour)
end
return output
end
Now the problem is i keep getting the error:
MemCache::MemCacheError (Resource temporarily unavailable - ):
c:/jruby-1.5.1/lib/ruby/1.8/net/protocol.rb:116:in readuntil' app/controllers/application_controller.rb:102:indata_cache’
app/controllers/channel_members_controller.rb:27:in follows' c:/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:104:inservice’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:65:in run' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:173:instart_thread’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:instart_thread’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:95:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:ineach’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:in start' c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:23:instart’
c:/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:82:in `start’
Please help
You are fighting Rails, in my experience not a time effective thing to
do.
Why do you want use Rails and not do it the Rails way?
Jeffrey
Quoting Prachi T. [email protected]:
Hi Jeffrey,
I kept the folowing configuration only:
config.cache_store = :mem_cache_store
and it works.
But now i want to try other way that is creating an instance like this:
memcache_options = {
:compression => true,
:debug => false,
:namespace => “mem-#{RAILS_ENV}”,
:readonly => false,
:urlencode => false
}
memcache_servers = [ ‘127.0.0.1:11211’ ]
CACHE = MemCache.new(memcache_options)
CACHE.servers = memcache_servers
and i commented out the following:
config.cache_store = :mem_cache_store
But during server startup it throws the following error:
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
C:/WEB2.0/Workspaces/RELEASE 2/Version
1/microblogging/vendor/rails/activesupport/lib/active_support/dependencies.rb:443:in
load_missing_constant': uninitialized constant MemCache (NameError) from C:/WEB2.0/Workspaces/RELEASE 2/Version 1/microblogging/vendor/rails/activesupport/lib/active_support/dependencie s.rb:80:inconst_missing_with_dependencies’
from C:/WEB2.0/Workspaces/RELEASE 2/Version
1/microblogging/vendor/rails/activesupport/lib/active_support/dependencie
s.rb:92:in const_missing' from C:/WEB2.0/Workspaces/RELEASE 2/Version 1/microblogging/config/environment.rb:62 from C:/WEB2.0/Workspaces/RELEASE 2/Version 1/microblogging/config/environment.rb:31:in require’
from
c:/jruby-1.5.1/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
require' from C:/WEB2.0/Workspaces/RELEASE 2/Version 1/microblogging/vendor/rails/activesupport/lib/active_support/dependencie s.rb:156:in require’
from C:/WEB2.0/Workspaces/RELEASE 2/Version
1/microblogging/vendor/rails/activesupport/lib/active_support/dependencie
s.rb:521:in new_constants_in' from C:/WEB2.0/Workspaces/RELEASE 2/Version 1/microblogging/vendor/rails/activesupport/lib/active_support/dependencie s.rb:156:in require’
from C:/WEB2.0/Workspaces/RELEASE 2/Version
1/microblogging/vendor/rails/railties/lib/commands/server.rb:84
from C:/WEB2.0/Workspaces/RELEASE 2/Version
1/microblogging/vendor/rails/railties/lib/commands/server.rb:31:in
requi re' from c:/jruby-1.5.1/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in require’
from script/server:3
How do i create a constant which is an instance of memcache, as i am
trying above?
Jeffrey L. Taylor wrote:
Quoting Yani Y. [email protected]:
What i did in my environment.rb file was created an instance of memcache
and assign it to a constant:
CACHE = MemCache.new(‘127.0.0.1’)
and then in my code something like this:
[snip]
Okay, that makes it clearer to me. I think you are starting two
instances of
the cache client and the second one fails because the first is already
present
and running. Try with just the
config.cache_store = :mem_cache_store
and comment out the rest.
Jeffrey
Prachi,
I can’t help you there, I’ve used memcache only for caching HTML
fragments.
There are several fine tutorials on using memcache on the Web, including
using
it to cache database records. Try railscasts.com, their screencasts are
excellent.
Jeffrey
Quoting Prachi T. [email protected]:
Hi,
I guess you write. I used memcache the rails way.
I have one more doubt. I want a write through cache mechanism. How to
enable that?
Is there some configuration?
Also, found that cache-money is a write through as well as read only
cache. I wanted to know how to configure it to behave as write through
ie, any new entry should first be made to cache and then to the backing
store. In my case the database.
The below configuration:
:readonly => false,
makes cache write enabled, but does it also write it to the backing
store?
I want a write through cache policy
Jeffrey L. Taylor wrote:
You are fighting Rails, in my experience not a time effective thing to
do.
Why do you want use Rails and not do it the Rails way?
Jeffrey
Quoting Prachi T. [email protected]: