http://robbin.iteye.com/ ---Robbin的博客
http://robbin.iteye.com/blog/77338 ---为什么ORM性能比iBatis好?
http://bentley.blogbus.com/logs/22138875.html --Django缓存
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
Memcached的一个极好的特性是它在多个服务器分享缓存的能力,这意味着你可以在多台机器上运行Memcached进程,程序将会把这组机器当作一个单独的缓存,而不需要在每台机器上复制缓存值
CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'
Memcached的是基于内存的缓存有一个重大的缺点,因为缓存数据只存储在内存中,则如果服务器死机的话数据会丢
失,显然内存不是为持久数据存储准备的
==
数据库缓存
在你的数据库创建缓存表,并在表里指出Django的缓存系统来使用数据库表作为缓存后端
文件系统缓存
CACHE_BACKEND = 'file:///var/tmp/django_cache'
本地缓存器缓存
CACHE_BACKEND = 'locmem:///'
简单缓存(开发用)
CACHE_BACKEND = 'simple:///'
假缓存(开发用)
CACHE_BACKEND = 'dummy:///'
CACHE_BACKEND = "locmem:///?timeout=30&max_entries=400"
整站点缓存
视图缓存
一个更细粒度的使用缓存框架的方式是缓存单独视图的输出.
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request, param):
视图缓存和URL有关,如果多个URLs指向同一视图,则每个URL将被单独缓存,
urlpatterns = ('',
(r'^foo/(\d{1,2})/$', my_view),
)
则对/foo/1/和/foo/23/的请求将像你期望的那样被单独缓存,但是一旦一个特别的URL(例如/foo/23/)被请求,则该URL后续
的请求将使用缓存. 在URL配置里指定视图缓存而不是在视图方法本身附近,你可能想重用视图方法到另一个很少缓存的站点,或者你可能想发布视图给那些可
能想不用缓存来使用它们的人.
urlpatterns = ('',
(r'^foo/(\d{1,2})/$', cache_page(my_view, 60 * 15)),
)
低级缓存API:
from django.core.cache import cache
>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
如果缓存中对象不存在,或者缓存后端不可得到,则cache.get()返回None:
# Wait 30 seconds for 'my_key' to expire...
>>> cache.get('my_key')
None
建议不要在缓存中存储字面上的None,因为你不能区别你存储的None值和通过返回None值表示的缓存缺失
cache.get()可以使用一个default参数,它指定了如果对象在缓存中不存在时的返回值:
>>> cache.get('my_key', 'has expired')
'has expired'
>>> cache.set('a', 1)
>>> cache.set('b', 2)
>>> cache.set('c', 3)
>>> cache.get_many(['a', 'b', 'c'])
{'a': 1, 'b': 2, 'c': 3}
====
from django.views.decorators.vary import vary_on_headers
# Python 2.4+ decorator syntax.
@vary_on_headers('User-Agent')
def my_view(request):
# ...
这种情况下,缓存机制(例如Django自己的缓存中间件)将对每个唯一的user-agent缓存单独版本的页面
使用vary_on_headers装饰器而不是手动设置Vary头部(使用类似于response['Vary'] = 'user-agent')的优势是装饰器添加
到Vary头部(可能已经存在)而不是从零开始设置它并潜在的覆盖已经在那里的东西
你可以传递多个头部到vary_on_headers():
这两个视图是相等的:
@vary_on_cookie
def my_view(request):
# ...
@vary_on_headers('Cookie')
def my_view(request):
# ...
===缓存使用策略
在项目中的具体应用策略(也就是哪些数据应该缓存?怎么样缓存?过 期策略?)
总原则是将经常需要从数据库读取的数据缓存在memcached中。
这些数据也分为几类:
一、经常被读取并且实时性要求不强可以等到自动过期的数据。例如网站首页最新文章列表、某某排行等数据。也就是虽然新数据产生了,但对用户体验不会产生任何影响的场景。
这类数据就使用典型的缓存策略,设置一过合理的过期时间,当数据过期以后再从数据库中读取。当然你得制定一个缓存清除策略,便于编辑或者其它人员能马上看到效果。
二、经常被读取并且实时性要求强的数据。比如用户的好友列表,用户文章列表,用户阅读记录等。
这类数据首先被载入到memcached中,当发生更改(添加、修改、删除)时就清除缓存。在缓存的时候,我将查询的SQL语句md5()得到它的 hash值作为key,结果数组作为值写入memcached,并且将该SQL涉及的table_name以及hash值配对存入memcached中。 当更改了这个表时,我就将与此表相配对的key的缓存全部删除。
三、统计类缓存,比如文章浏览数、网站PV等
此类缓存是将在数据库的中来累加的数据放在memcached来累加。获取也通过memcached来获取。但这样就产生了一个问题,如果 memcached服务器down掉的话这些数据就有可能丢失,所以一般使用memcached的永固性存储,这方面我们新浪使用memcachedb。
四、活跃用户的基本信息或者某篇热门文章。
此类数据的一个特点就是数据都是一行,也就是一个一维数组,当数据被update时(比如修改昵称、文章的评论数),在更改数据库数据的同时,使用Memcache::replace替换掉缓存里的数据。这样就有效了避免了再次查询数据库。
六、session数据
使用memcached来存储session的效率是最高的。memcached本身也是非常稳定的,不太用担心它会突然down掉引起session数据的丢失,即使丢失就重新登录了,也没啥。见[多服务器session共享之memcache共享]
【总结】
通过以上的策略数据库的压力将会被大大减轻。检验你使用memcached是否得当的方法是查看memcached的命中率。有些策略好的网站的命中率可以到达到90%以上。
分享到:
相关推荐
这里,我们将深入探讨几个核心知识点,帮助你理解如何打造一个高性能的站点。 1. **负载均衡**:当网站面临大量用户访问时,单一服务器可能无法承载。通过负载均衡技术,我们可以将流量分散到多个服务器上,从而...
在构建高性能Web站点的过程中,我们需要考虑许多关键因素以确保网站能够快速响应用户请求,并在高流量下保持稳定。"构建高性能Web站点"这个主题涵盖了网络基础、服务器优化、缓存策略、负载均衡、内容分发、数据库...
本书《构建高性能WEB站点》是针对WEB开发者的一本实用性极强的技术书籍,旨在帮助开发者构建性能优异的...开发者通过阅读和实践书中的知识点,将能够提升自身开发高性能WEB站点的能力,为用户打造更加流畅的网络体验。
3. **构建高性能Web站点(精选版)**:此书可能详细介绍了如何从整体上规划和设计高性能的Web站点,包括选择合适的Web服务器(如Apache、Nginx),配置HTTP缓存,实现动静分离,以及优化网络连接(如使用HTTP/2,...
【TheFasttheme】是一款以高性能、快响应和简洁设计为特点的主题,主要依赖原生JavaScript...通过研究和使用这个主题,开发者可以学习到如何优化JavaScript代码,编写简洁有效的CSS,以及如何构建高性能的Jekyll站点。
【使用 CakePHP 快速打造 Web 站点】教程旨在引导初学者了解和使用 CakePHP 框架,以高效地开发 Web 应用程序。CakePHP 是一个基于 Model-View-Controller (MVC) 设计模式的 PHP 框架,其稳定性和便捷性使其成为快速...
FastTunnel 高性能跨平台内网穿透工具,使用它可以实现将内网服务暴露到公网供自己或任何人访问。 - 与其他穿透工具不同的是,FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架。开源免费跨平台 内网...
Node.js具有异步、事件驱动的特性,这使得它在处理高并发I/O操作时表现出色,特别适合用于构建高性能的网络应用,如Web服务器、API服务和实时通信应用等。 ### 二、静态网站生成器 静态网站生成器是一种工具,它将...
在技术实现上,动易SW可能基于PHP语言开发,采用MySQL作为数据库,这种组合具有高性能、安全性高和易于扩展的特点。同时,模板可能采用HTML5和CSS3技术,提升网页的交互性和视觉效果。对于开发者来说,动易SW提供的...
3. 使用高性能服务器:Nginx作为一种高效的HTTP和反向代理服务器,其轻量级和高性能的特点使其成为处理大量静态内容请求的首选。 4. 负载均衡与服务器扩展:由于单一服务器无法满足高并发访问的需求,通过配置多台...
另一方面,美国邦纳推出的VS8系列高性能微型传感器,具备紧凑小巧的外形尺寸和多种光源(激光、可见红光、可见蓝光)以及四种检测模式(对射式、反射板式、可调区域式、定区域式),适用于狭小空间的各类检测应用,...
Gatsby是一个基于React的静态站点生成器,它利用现代Web技术来快速构建高性能的网站。MDX(Markdown + JSX)是一种语法,允许在Markdown文件中直接嵌入React组件,而主题UI则是一个用于创建可复用和可配置的React UI...
【打造自己强劲的通达信】是指通过个人定制和优化官方发布的通达信软件,以满足个人炒股需求和提升软件性能。通达信是一款广泛使用的股票行情分析软件,提供了实时行情、交易托付、资讯等功能。本文将详细介绍如何在...
它具有非阻塞I/O和事件驱动的特性,非常适合处理大量并发请求,因此在构建高性能的Web应用时受到广泛青睐。 接着,我们来看看MySQL。MySQL是一款开源、免费的关系型数据库管理系统,具有高可靠性和高性能。在博客...
### 打造个性XP系统:优化技巧与性能提升 在探讨如何优化Windows XP(以下简称WinXP)系统,使之运行...这些建议涵盖了硬件升级、系统设置优化、软件管理等多个层面,为打造个性化的高性能WinXP系统提供了全面指南。
AyWeb企业网站管理系统是一款专为企业用户设计的高效、易用的网站管理工具,其v2.6.3build090510单站点版更是集成了丰富的功能与优化的性能,为企业的在线业务提供了强大的支持。本文将深入探讨该系统的特性和使用...
控制面板中可以看到用户账户信息、系统性能监控、应用管理、内容管理等一系列的选项,用以全面掌控Liferay Portal实例。 综上所述,Liferay基本操作的知识点涵盖了登录、站点建立、页面管理、内容管理、站点配置和...
为满足这种需求,中国电信广州分公司与中兴通讯联合推出了一项 5G 连片精品网络优化技术方案,该方案旨在建设一个高性能、可靠的 5G 网络,满足用户日益增长的网络需求。 二、组网结构 在建设 5G 连片精品网络时,...