为什么使用缓存?
web网站一般会让多人连接上来,多个人同时访问web网站的操作[并发操作],并发操作情况下,最基本的要求就是互相操作不受影响。
网站开发完成后进行功能性测试时,压力测试。当多个客户端同时访问服务器,查询获取服务器数据时,就会出现性能问题。在这样的情况下,提升用户查询获取数据的效率变得至关重要;因为增、删、改一般不会特别频繁,对于数据的查询操作非常频繁,查询操作最为频繁的操作,性能瓶颈---数据查询【打开数据库连接、查询数据、关闭数据库连接】为了减少和数据库的交互,使用缓存,解决查询数据时,造成的数据库资源消耗的问题
Django中使用redis
- 安装redis
- 安装django-redis中间件:这个是django的一个第三方的模块,用于Django整合redis
pip install django-redis
- 配置项:在项目的setting.py文件中配置如下选项(默认没有这个选项):
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
redis还可以管理session,就是将session交给redis来管理(非必要,根据情况而论)
from django.core.cache import cache
#缓存中存储数据
cache.set(key,value,timeout=...)
实例操作
例如:创建一个函数,若能从缓存中读取到数据,则不从数据库中读取,反之,从数据库中读取数据,并保存在缓存中
from django.core.cache import cache
from . import models
#主要作用是将数据同步到缓存中
def get_all_articles(ischange=False):
# 首先从缓存中查询数据
print("首页从缓存中查询数据")
articles = cache.get("allArticles")
if articles is None or ischange:
print("缓存中没有数据,从数据库中读取")
articles = models.Article.objects.all()
# 这是将key为allArticles,value为articles的键值对存于缓存中
print("将数据保存到缓存中")
cache.set("allArticles", articles)
return articles
网友评论