- 浏览: 153167 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mysky1984:
:cry::arrow::idea:
Filter chain skipping --- 跳过过滤器链 -
shaka:
受用,考虑过这个问题没有?如何给过滤器传参数,或者在子类过滤器 ...
Filter chain skipping --- 跳过过滤器链 -
xlth2006@sina.com:
[img][/img][flash=200,200][/fla ...
rails2.0被废弃的用法
相关文献(http://www.ibm.com/developerworks/cn/web/wa-rails1/#N1007C)
许多应用程序似乎都花费很多时间做重复的事情。博客应用程序提交当前文章列表给每
个访问者。商店应用程序在同一页显示产器信息给请求它的每个人。
所有重复都浪费了我们服务器的资源时间。提交博客页面可以要求半打的数据库查询,
它可以一直运行很多Ruby方法和Rails模板。它不应该对每个单独的请求都有大量的处理,
但对每小时可能一千多次的点击率,突然你的服务器会变得缓慢。你的用户看到越来越慢的
“应答”。在这些情况下,我们可以使用缓存来减少服务器上的加载操作,并提高我们应用程序的“应答”。
Rails提出了三个缓存方案。在本章,我们将讨论两种,“页缓存”和“动作缓存”。
我们在366页查看第三种,“段缓存”。
“页缓存”是最简单及最有效的Rails缓存形式。在一个用户第一次请求一个特定的URL
时,我们的应用程序得到调用并产生一个HTML页面。这个页的内容被存储在缓冲中。在下一
次收到包含那个URL的请求时,HTML页面被从缓存中直接递交。你的应用程序从没有看到请
求。事实上,Rails根本就不会弄错:请求完全在web服务器内被处理,是web服务器生成
页缓存。非常有效率。你的应用程序以服务器递交任何静态内容的同样速度递交这些页面。
有时候,我们的应用程序至少需要部分地对这些请求进行处理。例如,你的商店可能只
显示某些产品的细节给一个用户的子集(或许是高级消费者会最先访问新产品)。在这种情况
下,你显示的页将有同样的内容,但你不想显示它给任何人—你需要过滤对被缓存内容的访
问。Rails为这个目的提供了“动作缓存”。用“动作缓存”,你的应用程序“控制器”还
可以被调用并且它的before“过滤器”也会运行。只是如果有个现有的被缓存的页,则“动
作”本身不被调用。
让我们看看在一个站点内,有公共的和高级的,限于会员的内容。我们有两个“控制器”,
一个是逻辑“控制器”,它用于检验某人不是会员,一个内容“控制器”,它带有显示公共
的和高级的内容的“动作”。公共的内容由单个页面和对收费文章的连接组成。如果有请求
收费内容,而它却不是会员,我们重定向它们到注册它们的逻辑“控制器”内的一个“动作”。
忽略一会缓存,我们来实现这个应用程序的内容部分,应用程序使用了一个before“过
滤器”来校验用户的状态和用于两种内容的一组“动作”方法。
Rails的Cache分四种:
1,Page Cache - Fastest
2,Action Cache - Next Fastest
3,Fragment Cache - Least Fastest
4,ActiveRecord Cache - Only available in Edge Rails
下面一一介绍上面四种Cache以及Rails如何使用memcached
一、Page Cache
如果开发阶段要使用cache,则需要先设置好config/environments/development.rb:
config.action_controller.perform_caching = true
而production环境下默认是开启cache功能的
Page Cache是Rails中最快的cache机制,使用Page Cache的前提一般为:
1,需要cache的page对所有用户一致
2,需要cache的page对public可访问,不需要authentication
Page Cache使用起来很简单:
class BlogController < ApplicationController
caches_page :list, :show
def list
Post.find(:all, \:order => "created_on desc", :limit => 10)
end
def show
@post = Post.find(params[:id])
end
end
这样我们就对BlogController的list和show页面进行了缓存
这样做的效果是第一次访问list和show页面时生成了public/blog/list.html和public/blog/show/5.html这两个html页面
对于分页情况下的cache,我们需要把url的page参数改写成"blog/list/:page"这种形式,而不是"blog/list?page=1"这种形式
这样cache的html页面即为public/blog/list/1.html
当数据更改时我们需要清除旧的缓存,我们采用Sweepers来做是非常不错的选择,这把在BlogController里清除缓存的代码分离出来
首先编辑config/environment.rb:
Rails::Initializer.run do |config|
# ...
config.load_paths += %w(#{RAILS_ROOT}/app/sweepers)
# ...
这告诉Rails加载#{RAILS_ROOT}/app/sweepers目录下的文件
我们为BlogController定义app/sweepers/blog_sweeper.rb:
class BlogSweeper < ActionController::Caching::Sweeper
observe Post # This sweeper is going to keep an eye on the Post model
# If our sweeper detects that a Post was created call this
def after_create(post)
expire_cache_for(post)
end
# If our sweeper detects that a Post was updated call this
def after_update(post)
expire_cache_for(post)
end
# If our sweeper detects that a Post was deletedcall this
def after_destroy(post)
expire_cache_for(post)
end
private
def expire_cache_for(record)
# Expire the list page now that we posted a new blog entry
expire_page(:controller => 'blog', :action => 'list')
# Also expire the show page, in case we just edit a blog entry
expire_page(:controller => 'blog', :action => 'show', :id => record.id)
end
end
然后我们在BlogController里加上该sweeper即可:
class BlogController < ApplicationController
caches_page :list, :show
cache_sweeper :blog_sweeper, \:only => [:create, :update, :destroy]
# ...
end
我们可以配置cache的静态html文件的存放位置,这在config/environment.rb里设置:
config.action_controller.page_cache_directory = RAILS_ROOT + "/public/cache/"
然后我们设置Apache/Lighttpd对于静态html文件render时不接触Rails server即可
所以Page Cache就是最快的Cache,因为它不与Rails server打交道,直接load静态html
二、Action Cache
Action Cache相关的helper方法是caches_action和expire_action,其他基本和Page Cache一样
另外我们还可以运行rake tmp:cache:clear来清空所有的Action Cache和Fragment Cache
class BlogController < ApplicationController
before_filter :authentication
caches_action :list, :show
cache_sweeper :blog_sweeper, \:only => [:create, :update, :destroy]
如上代码所示,我们将authentication这个filter放在caches_action之前声明,这样我们的Action Cache在执行之前会先访问authentication方法
这样可以弥补Page Cache不能对需要登录认证的Page进行Cache的缺点
生成的cache文件为tmp/cache/localhost:3000/blog/list.cache,这样对不同subdomain的访问页面可以cache到不同的目录
由于每次访问Action Cache时都需要与Rails server打交道,并且要先运行filters,所以比Page Cache的效率稍低
三、Fragment Cache
Fragment Cache用于处理rhtml页面中的部分需要cache的模块,如app/views/blog/list.rhtml:
<strong>My Blog Posts</strong>
<% cache do %>
<ul>
<% for post in @posts %>
<li><%= link_to post.title, :controller => 'blog', :action => 'show', :id => post %></li>
<% end %>
</ul>
<% end %>
生成的cache文件为/tmp/cache/localhost:3000/blog/list.cache
我们需要在BlogController的list方法里加上一行判断,如果是读取Fragment Cache,则不必再查询一次数据库:
def list
unless read_fragment({})
@post = Post.find(:all, \:order => 'created_on desc', :limit => 10)
end
end
Fragment分页时的Cache:
def list
unless read_fragment({:page => params[:page] || 1}) # Add the page param to the cache naming
@post_pages, @post = paginate :posts, :per_page => 10
end
end
rhtml页面也需要改写:
<% cache ({:page => params[:page] || 1}) do %>
... All of the html to display the posts ...
<% end %>
生成的cahce文件为/tmp/cache/localhost:3000/blog/list.page=1.cache
从分页的Fragment Cache可以看出,Fragment Cache可以添加类似名字空间的东西,用于区分同一rhtml页面的不同Fragment Cache,如:
cache ("turkey") => "/tmp/cache/turkey.cache"
cache (:controller => 'blog', :action => 'show', :id => 1) => "/tmp/cache/localhost:3000/blog/show/1.cache"
cache ("blog/recent_posts") => "/tmp/cache/blog/recent_posts.cache"
cache ("#{request.host_with_port}/blog/recent_posts") => "/tmp/cache/localhost:3000/blog/recent_posts.cache"
清除Fragment Cache的例子:
expire_fragment(:controller => 'blog', :action => 'list', :page => 1)
expire_fragment(%r{blog/list.*})
四、ActiveRecord Cache
Rails Edge中ActiveRecord已经默认使用SQl Query Cache,对于同一action里面同一sql语句的数据库操作会使用cache
五、memcached
越来越多的大型站点使用memcached做缓存来加快访问速度
memcached是一个轻量的服务器进程,通过分配指定数量的内存来作为对象快速访问的cache
memcached就是一个巨大的Hash表,我们可以存取和删除key和value:
@tags = Tag.find :all
Cache.put 'all_your_tags', @tags
Cache.put 'favorite_skateboarder', 'Tom Penny'
skateboarder = Cache.get 'favorite_skateboarder'
Cache.delete 'all_your_tags'
我们可以使用memcached做如下事情:
1,自动缓存数据库的一行作为一个ActiveRecord对象
2,缓存render_to_string的结果
3,手动存储复杂的数据库查询作为缓存
cached_model让我们轻松的缓存ActiveRecord对象,memcahed-client包含在cached_model的安装里,memcahed-client提供了缓存的delete方法
Java代码
sudo gem install cached_model
我们在config/environment.rb里添加如下代码来使用memcached:
require 'cached_model'
memcache_options = {
:c_threshold => 10_000,
:compression => true,
:debug => false,
:namespace => 'my_rails_app',
:readonly => false,
:urlencode => false
}
CACHE = MemCache.new memcache_options
CACHE.servers = 'localhost:11211'
对于production环境我们把上面的代码挪到config/environments/production.rb里即可
然后让我们的domain model集成CachedModel而不是ActiveRecord::Base
class Foo < CachedModel
end
然后我们就可以使用memcached了:
all_foo = Foo.find :all
Cache.put 'Foo:all', all_foo
Cache.get 'Foo:all'
需要注意的几点:
1,如果你查询的item不在缓存里,Cache.get将返回nil,可以利用这点来判断是否需要重新获取数据并重新插入到缓存
2,CachedModel的记录默认15分钟后expire,可以通过设置CachedModel.ttl来修改expiration time
3,手动插入的对象也会过期,Cache.put('foo', 'bar', 60)将在60秒后过期
4,如果分配的内存用尽,则older items将被删除
5,可以对每个app server启动一个memcached实例,分配128MB的内存对一般的程序来说足够
许多应用程序似乎都花费很多时间做重复的事情。博客应用程序提交当前文章列表给每
个访问者。商店应用程序在同一页显示产器信息给请求它的每个人。
所有重复都浪费了我们服务器的资源时间。提交博客页面可以要求半打的数据库查询,
它可以一直运行很多Ruby方法和Rails模板。它不应该对每个单独的请求都有大量的处理,
但对每小时可能一千多次的点击率,突然你的服务器会变得缓慢。你的用户看到越来越慢的
“应答”。在这些情况下,我们可以使用缓存来减少服务器上的加载操作,并提高我们应用程序的“应答”。
Rails提出了三个缓存方案。在本章,我们将讨论两种,“页缓存”和“动作缓存”。
我们在366页查看第三种,“段缓存”。
“页缓存”是最简单及最有效的Rails缓存形式。在一个用户第一次请求一个特定的URL
时,我们的应用程序得到调用并产生一个HTML页面。这个页的内容被存储在缓冲中。在下一
次收到包含那个URL的请求时,HTML页面被从缓存中直接递交。你的应用程序从没有看到请
求。事实上,Rails根本就不会弄错:请求完全在web服务器内被处理,是web服务器生成
页缓存。非常有效率。你的应用程序以服务器递交任何静态内容的同样速度递交这些页面。
有时候,我们的应用程序至少需要部分地对这些请求进行处理。例如,你的商店可能只
显示某些产品的细节给一个用户的子集(或许是高级消费者会最先访问新产品)。在这种情况
下,你显示的页将有同样的内容,但你不想显示它给任何人—你需要过滤对被缓存内容的访
问。Rails为这个目的提供了“动作缓存”。用“动作缓存”,你的应用程序“控制器”还
可以被调用并且它的before“过滤器”也会运行。只是如果有个现有的被缓存的页,则“动
作”本身不被调用。
让我们看看在一个站点内,有公共的和高级的,限于会员的内容。我们有两个“控制器”,
一个是逻辑“控制器”,它用于检验某人不是会员,一个内容“控制器”,它带有显示公共
的和高级的内容的“动作”。公共的内容由单个页面和对收费文章的连接组成。如果有请求
收费内容,而它却不是会员,我们重定向它们到注册它们的逻辑“控制器”内的一个“动作”。
忽略一会缓存,我们来实现这个应用程序的内容部分,应用程序使用了一个before“过
滤器”来校验用户的状态和用于两种内容的一组“动作”方法。
Rails的Cache分四种:
1,Page Cache - Fastest
2,Action Cache - Next Fastest
3,Fragment Cache - Least Fastest
4,ActiveRecord Cache - Only available in Edge Rails
下面一一介绍上面四种Cache以及Rails如何使用memcached
一、Page Cache
如果开发阶段要使用cache,则需要先设置好config/environments/development.rb:
config.action_controller.perform_caching = true
而production环境下默认是开启cache功能的
Page Cache是Rails中最快的cache机制,使用Page Cache的前提一般为:
1,需要cache的page对所有用户一致
2,需要cache的page对public可访问,不需要authentication
Page Cache使用起来很简单:
class BlogController < ApplicationController
caches_page :list, :show
def list
Post.find(:all, \:order => "created_on desc", :limit => 10)
end
def show
@post = Post.find(params[:id])
end
end
这样我们就对BlogController的list和show页面进行了缓存
这样做的效果是第一次访问list和show页面时生成了public/blog/list.html和public/blog/show/5.html这两个html页面
对于分页情况下的cache,我们需要把url的page参数改写成"blog/list/:page"这种形式,而不是"blog/list?page=1"这种形式
这样cache的html页面即为public/blog/list/1.html
当数据更改时我们需要清除旧的缓存,我们采用Sweepers来做是非常不错的选择,这把在BlogController里清除缓存的代码分离出来
首先编辑config/environment.rb:
Rails::Initializer.run do |config|
# ...
config.load_paths += %w(#{RAILS_ROOT}/app/sweepers)
# ...
这告诉Rails加载#{RAILS_ROOT}/app/sweepers目录下的文件
我们为BlogController定义app/sweepers/blog_sweeper.rb:
class BlogSweeper < ActionController::Caching::Sweeper
observe Post # This sweeper is going to keep an eye on the Post model
# If our sweeper detects that a Post was created call this
def after_create(post)
expire_cache_for(post)
end
# If our sweeper detects that a Post was updated call this
def after_update(post)
expire_cache_for(post)
end
# If our sweeper detects that a Post was deletedcall this
def after_destroy(post)
expire_cache_for(post)
end
private
def expire_cache_for(record)
# Expire the list page now that we posted a new blog entry
expire_page(:controller => 'blog', :action => 'list')
# Also expire the show page, in case we just edit a blog entry
expire_page(:controller => 'blog', :action => 'show', :id => record.id)
end
end
然后我们在BlogController里加上该sweeper即可:
class BlogController < ApplicationController
caches_page :list, :show
cache_sweeper :blog_sweeper, \:only => [:create, :update, :destroy]
# ...
end
我们可以配置cache的静态html文件的存放位置,这在config/environment.rb里设置:
config.action_controller.page_cache_directory = RAILS_ROOT + "/public/cache/"
然后我们设置Apache/Lighttpd对于静态html文件render时不接触Rails server即可
所以Page Cache就是最快的Cache,因为它不与Rails server打交道,直接load静态html
二、Action Cache
Action Cache相关的helper方法是caches_action和expire_action,其他基本和Page Cache一样
另外我们还可以运行rake tmp:cache:clear来清空所有的Action Cache和Fragment Cache
class BlogController < ApplicationController
before_filter :authentication
caches_action :list, :show
cache_sweeper :blog_sweeper, \:only => [:create, :update, :destroy]
如上代码所示,我们将authentication这个filter放在caches_action之前声明,这样我们的Action Cache在执行之前会先访问authentication方法
这样可以弥补Page Cache不能对需要登录认证的Page进行Cache的缺点
生成的cache文件为tmp/cache/localhost:3000/blog/list.cache,这样对不同subdomain的访问页面可以cache到不同的目录
由于每次访问Action Cache时都需要与Rails server打交道,并且要先运行filters,所以比Page Cache的效率稍低
三、Fragment Cache
Fragment Cache用于处理rhtml页面中的部分需要cache的模块,如app/views/blog/list.rhtml:
<strong>My Blog Posts</strong>
<% cache do %>
<ul>
<% for post in @posts %>
<li><%= link_to post.title, :controller => 'blog', :action => 'show', :id => post %></li>
<% end %>
</ul>
<% end %>
生成的cache文件为/tmp/cache/localhost:3000/blog/list.cache
我们需要在BlogController的list方法里加上一行判断,如果是读取Fragment Cache,则不必再查询一次数据库:
def list
unless read_fragment({})
@post = Post.find(:all, \:order => 'created_on desc', :limit => 10)
end
end
Fragment分页时的Cache:
def list
unless read_fragment({:page => params[:page] || 1}) # Add the page param to the cache naming
@post_pages, @post = paginate :posts, :per_page => 10
end
end
rhtml页面也需要改写:
<% cache ({:page => params[:page] || 1}) do %>
... All of the html to display the posts ...
<% end %>
生成的cahce文件为/tmp/cache/localhost:3000/blog/list.page=1.cache
从分页的Fragment Cache可以看出,Fragment Cache可以添加类似名字空间的东西,用于区分同一rhtml页面的不同Fragment Cache,如:
cache ("turkey") => "/tmp/cache/turkey.cache"
cache (:controller => 'blog', :action => 'show', :id => 1) => "/tmp/cache/localhost:3000/blog/show/1.cache"
cache ("blog/recent_posts") => "/tmp/cache/blog/recent_posts.cache"
cache ("#{request.host_with_port}/blog/recent_posts") => "/tmp/cache/localhost:3000/blog/recent_posts.cache"
清除Fragment Cache的例子:
expire_fragment(:controller => 'blog', :action => 'list', :page => 1)
expire_fragment(%r{blog/list.*})
四、ActiveRecord Cache
Rails Edge中ActiveRecord已经默认使用SQl Query Cache,对于同一action里面同一sql语句的数据库操作会使用cache
五、memcached
越来越多的大型站点使用memcached做缓存来加快访问速度
memcached是一个轻量的服务器进程,通过分配指定数量的内存来作为对象快速访问的cache
memcached就是一个巨大的Hash表,我们可以存取和删除key和value:
@tags = Tag.find :all
Cache.put 'all_your_tags', @tags
Cache.put 'favorite_skateboarder', 'Tom Penny'
skateboarder = Cache.get 'favorite_skateboarder'
Cache.delete 'all_your_tags'
我们可以使用memcached做如下事情:
1,自动缓存数据库的一行作为一个ActiveRecord对象
2,缓存render_to_string的结果
3,手动存储复杂的数据库查询作为缓存
cached_model让我们轻松的缓存ActiveRecord对象,memcahed-client包含在cached_model的安装里,memcahed-client提供了缓存的delete方法
Java代码
sudo gem install cached_model
我们在config/environment.rb里添加如下代码来使用memcached:
require 'cached_model'
memcache_options = {
:c_threshold => 10_000,
:compression => true,
:debug => false,
:namespace => 'my_rails_app',
:readonly => false,
:urlencode => false
}
CACHE = MemCache.new memcache_options
CACHE.servers = 'localhost:11211'
对于production环境我们把上面的代码挪到config/environments/production.rb里即可
然后让我们的domain model集成CachedModel而不是ActiveRecord::Base
class Foo < CachedModel
end
然后我们就可以使用memcached了:
all_foo = Foo.find :all
Cache.put 'Foo:all', all_foo
Cache.get 'Foo:all'
需要注意的几点:
1,如果你查询的item不在缓存里,Cache.get将返回nil,可以利用这点来判断是否需要重新获取数据并重新插入到缓存
2,CachedModel的记录默认15分钟后expire,可以通过设置CachedModel.ttl来修改expiration time
3,手动插入的对象也会过期,Cache.put('foo', 'bar', 60)将在60秒后过期
4,如果分配的内存用尽,则older items将被删除
5,可以对每个app server启动一个memcached实例,分配128MB的内存对一般的程序来说足够
发表评论
-
Magic Column Names(自动的列名)
2008-08-10 16:09 2840在课程的最后两章我们会提到很多列名字,它们对“活动记录”有重大 ... -
Callback Objects
2008-08-10 16:04 2912可在“模型”类内直接 ... -
Timestamping Records
2008-08-10 15:57 2778before_create 和before_update 回调 ... -
Callbacks
2008-08-10 15:46 2830“活动记录”控制“模 ... -
“聚合”(Aggregation)
2008-08-07 00:20 4249数据库列有个带限制的类型集: integers, string ... -
acts as list/acts as tree
2008-08-07 00:03 3959Acts As List 在子表中使 ... -
基于时间缓存
2008-08-06 00:18 2778def index when_fragment_expir ... -
Sweeper实例
2008-08-03 22:16 3139expir_xxx 方法会工作的很好,但是在你的“控制器”中它 ... -
verify(验证)
2008-08-01 14:18 2983before“过滤器”的通常 ... -
“过滤器”(before,after,around)
2008-08-01 14:18 4007“过滤器”可以让你在你的“控制器”内写代码来包装由“动作”完成 ... -
Flash—“动作”间的通信
2008-08-01 13:37 2954Flash—“动作”间的通信 当我们使用redirect_to ... -
“会话”存储比较和失效与清理
2008-07-31 22:58 3158比较“会话”存储选项 ... -
“会话”存储
2008-07-31 22:56 2961在存储你的“会话”数据时,Rails 有很多选项。每个选项即好 ... -
“会话”session
2008-07-31 22:54 3587Rails 的“会话”是个类 ... -
cookies
2008-07-31 22:40 3264Cookie 允许web 应用程序 ... -
对用户应答(1,2,3)
2008-07-30 00:36 1082“控制器”的一部分工作是响应用户。有三个基本方式来完成个工作: ... -
应答3-重定向(redirect_to)
2008-07-30 00:34 2743一个HTTP redirect 被从服 ... -
应答2-发送文件和其它数据(send_data)
2008-07-30 00:25 1912我们已经看了在“控制器”内提交模板(render)和发送字符串 ... -
应答1-提交模板(render)方法
2008-07-29 23:52 2137模板是个文件,它定义 ... -
开发环境中的预设对象(request、params)
2008-07-29 23:33 2214“控制器”为“动作”设置环境。环境被建立在实例变量内,但你应该 ...
相关推荐
Flask:Flask扩展使用:Flask-Caching缓存机制.docx
本文将详细介绍ASP.NET 2.0中的几种缓存技术,包括输出缓存(Output Caching)、片段缓存(Fragment Caching)、数据缓存(Data Caching)以及SQL缓存(SQL Caching),并探讨它们的应用场景和技术细节。 #### 二、输出缓存...
Laravel是一个为开发者提供了丰富功能的现代PHP框架,其中之一就是Caching(缓存)。通过使用缓存技术,可以有效地减少数据库的查询次数,从而提高应用性能。 Laravel的缓存系统提供了一种简单的方法来缓存数据和...
ResponseCaching, 用于缓存响应的ASP.NET 核心中间件 ASP.NET 核心响应缓存AppVeyor: : 这里 repo 承载用于响应缓存的ASP.NET 核心中间件。这里项目是 ASP.NET 核心的一部分。 你可以在主页上找到 ASP.NET 核心的...
MemCached高速缓存类库Enyim.Caching.dll 自建MemCached或者链接阿里云OCS都可以使用此类库
C#中的缓存功能主要通过System.Runtime.Caching命名空间来实现。 在C#中,缓存可以分为多种类型,包括进程内缓存(如MemoryCache)和分布式缓存(如Redis、Memcached)。本文将重点介绍进程内缓存,即MemoryCache类...
在ASP.NET中,数据缓存是通过`System.Web.Caching.Cache`类来实现的。这个类提供了一系列方法和属性,用于添加、更新、检索和删除缓存项。 #### 3. 实现代码详解 下面的代码展示了如何在ASP.NET (C#) 中实现显示...
首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时存储经常访问的数据,以减少对主存储器(如数据库或硬盘)的访问次数,从而提高数据读取速度。在Web应用中,这通常涉及到将常用页面内容、计算结果或者...
微软企业库5.0(EntLib)的Caching Application Block是一个强大的工具,旨在帮助开发者提高应用程序的性能,通过缓存数据减少不必要的数据库查询和其他昂贵的操作。在本教程中,我们将深入探讨如何使用缓存来提升...
### Web Caching:关键技术与应用 #### 一、引言 随着互联网的迅猛发展,特别是自1993年以来世界万维网(World Wide Web,简称WWW)的普及与使用量急剧增加,网络负载和用户响应时间面临了前所未有的挑战。这种...
- 应用程序缓存:利用System.Web.Caching命名空间提供的API进行缓存操作,可以设置缓存依赖,当依赖的资源改变时,自动更新缓存。 - 文件和数据库缓存依赖:当文件或数据库中的数据发生变化时,缓存内容自动失效。...
#### 一、什么是缓存(Caching) 缓存是一种优化数据库应用程序的技术,它的设计目的是减少应用与数据库之间的通信流量,通过存储已经从数据库加载的数据来实现这一目标。当从数据库检索数据时,只有那些当前缓存中...
Enyim.Caching 还提供了多种性能优化手段,比如使用预热机制加载常用数据到缓存,以及利用缓存策略(如 LRU,LFU)有效地管理缓存空间。 总结,Enyim.Caching 2.4 是一个强大的 .NET Memcached 客户端,它的灵活性...
- .NET Framework的System.Web.Caching缓存:提供了一套完整的缓存管理API,可以自定义缓存策略。 - 缓存依赖:基于文件、数据库或其他条件的依赖,一旦依赖发生变化,缓存自动失效。 页面输出缓存是ASP.NET中...
第三方缓存解决方案如Com+/Enterprise Library Caching/Windows服务等,为开发者提供了更高级别的缓存管理和扩展性,适用于高并发、大规模的Web应用。 总之,ASP.NET缓存是一个多维度的优化策略,它涵盖了从客户端...
通过在方法上使用`@Cacheable`、`@CacheEvict`和`@Caching`等注解,可以轻松地控制缓存的存取和清除。 1. **@Cacheable**:这个注解用于标记一个方法,表示其结果应该被缓存。例如: ```java @Cacheable(value =...
.NET Framework 4.0引入了`System.Runtime.Caching`命名空间,提供了一种独立于ASP.NET之外的内存缓存服务。这个命名空间中的`MemoryCache`类是主要的缓存管理工具,它可以用来存储任意类型的数据,并提供了丰富的...