打造高性能站点

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%以上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值