Redis
Redis是一种键值对类型的内存数据库,读写内存比读写硬盘快,我们在Django里面使用Redis非常方便,下面给出详细步骤

基于Ubuntu

1. 安装Redis和django-redis
sudo apt-get install redis-server
1
用 redis 做 Django的缓存系统的开源项目地址,有兴趣的看看:https://github.com/niwibe/django-redis
在这里我们把它装上,让Django和Redis手拉手交个朋友

pip install django-redis
1
2
2. 检查运行状态
ps -aux|grep redis
1
netstat -nlt|grep 6379
1
3. 修改seetings.py
#配置我是这么写的没问题
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': '127.0.0.1:6379',
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
},
}
1
2
3
4
5
6
7
8
9
10
#如果你的有问题,试试官方的写法 http://django-redis-chs.readthedocs.io/zh_CN/latest/#
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
1
2
3
4
5
6
7
8
9
10
4. 测试redis缓存
#进Django的shell里面
python manage.py shell
1
2
#从shell里面输入下面命令测试,不报错就正常,要是报错了要么没开启redis要么没装好,检查之前的步骤
from django.core.cache import cache
#写入key为key1,值为666的缓存,有效期30分钟
cache.set('key1', '666', 30*60)
cache.has_key('key1') #判断key为k是否存在
cache.get('key1') #获取key为k的缓存
1
2
3
4
5
6
5. 更新和读取缓存
之前在Views.py视图函数里面,收到form提交的更新只是写入数据库,现在增加个更新缓存

#写入缓存
key = 'QuestionCache'
from django.core.cache import cache

def ask_question(request):

question_category_name = request.POST['radio']
question_title = request.POST['question_title']
question_keywords = request.POST['question_keywords']
question_text = request.POST['question_content']
#没必要再设置这个字段了,models里面可以用auto_now自动获取当前时间的question_date = datetime.datetime.now()
question_author = request.user
joe = QuestionCategory.objects.get(category_name=question_category_name)
qqqq = Question(question_category=joe,question_title=question_title,question_keywords=question_keywords,question_text=question_text,question_author=question_author)
#写入数据库
qqqq.save()

#更新缓存
cache.set(key, list(Question.objects.all().order_by('-question_date')))

return redirect('pythonnav:blogindex_html')

# 读取缓存
def blogindex_html(request):
#获取问题所有分类
a = QuestionCategory.objects.all()
es = []
for e in a:
es.append(e.category_name)

# 展示所有的问题
from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger
limit = 10 # 每页显示的记录条数

#以前是直接从数据库查,每次都查数据多了要死人的,5555
#现在先判断下,如果redis内存里面有就从内存读,不从数据库里查了,耶,感觉萌萌哒
if cache.has_key(key):
question = cache.get(key)
else:
question = Question.objects.all().order_by('-question_date')
paginator = Paginator(question,limit)#实例化一个分页对象

page = request.GET.get('page') #获取到页码

try:
q = paginator.page(page) #获取某夜对应的记录
except PageNotAnInteger: #如果页码不是个整数
q = paginator.page(1)#取第一页的记录
except EmptyPage:#如果页码太大
q = paginator.page(paginator.num_pages)#取最后一页的记录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Memcached
使用前准备工作
1.ubuntu下先安装:

sudo apt-get install memcached
pip install python-memcached
1
2
2.启动memcached

memcached -d -m 64 -u www -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
1
-d选项是启动一个守护进程,

-m是分配给Memcache使用的内存数量,单位是MB,我这里设的是64MB,

-u是运行Memcache的用户,我这里是www,

-l是监听的服务器IP地址,如果有多个地址的话,用空格分隔

-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,

-c选项是最大运行的并发连接数,默认是1024

-P是设置保存Memcache的PID文件,我这里是保存在 /tmp/memcached.pid,方便查看PID

3.查看memcached:

启动成功后,查看进程状态:

ps -ef | grep memcached
1
查看11211端口状态:

netstat -ntl
1
memcached的配置文件路径:

/etc/sysconfig/memcached
1
4.测试memcache是否可以使用:
python manage.py shell 进入Django shell中

from django.core.cache import cache
cache.set('key1', 'test')
value = cache.get('key1')
print value
#得到结果test
1
2
3
4
5
1.Django中seetings里面的设置
使用IP端口与Django交互
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}

也可以通过一个本地的Unix socket file/tmp/memcached.sock来交互
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
题外话:Memcached有一个非常好的特点就是可以让几个服务的缓存共享。 这就意味着你可以再几个物理机上运行Memcached服务,这些程序将会把这几个机器当做 同一个 缓存,从而不需要复制每个缓存的值在每个机器上。为了使用这个特性,把所有的服务地址放在LOCATION里面,用分号隔开或者当做一个list。

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
1
2
3
4
5
6
7
8
9
2.Django中具体使用和Redis差不多
缓存数据

from django.core.cache import cache
def about(request):
if cache.get('key1'):
data = cache.get('key1')
else:
访问数据库,得到data
cache.set('data')
...
1
2
3
4
5
6
7
8
每次进来,先查看cache中是否存在,若存在,直接获得该值,若不存在,则访问数据库,
得到数据之后,将其写入到cache之后,以便后续之用。

缓存整个页面。
可以使用Django提供的cache_page装饰函数,例如缓存about页面:
from django.views.decorators.cache import cache_page

@cache_page(60*30)
def about(request):
...
1
2
3
只需在view函数前加上cache_page装饰函数便可以该页面,cache_page的参数是缓存时间
这里设的是60s*30,即30分钟。同时也可以指定使用的缓存,通过cache参数来指定,例如:
@cache_page(60*30, cache='file_cache')则指定使用settings文件中CACHES中的file_cache
来缓存,若不指定,默认用default的来缓存。

更多参考:
http://python.usyiyi.cn/translate/django_182/topics/cache.html

Django 缓存
Django缓存简介为什么要用缓存?我们知道,在Django中,请求到达视图后,视图会从数据库取数据放到模板中进行动态渲染,渲染后的结果就是用户看到的html页面。但是,如果每次请求都从数据库取数据并...
---------------------
作者:Peace & Love
来源:CSDN
原文:https://blog.csdn.net/u013205877/article/details/77397273?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Citrix Xen Desktop安装配置
  2. MRDS学习一——Hello World
  3. 分享一个很早之前写的小工具DtSpyPlus
  4. LeetCode Verify Preorder Serialization of a Binary Tree
  5. Twitter search API
  6. 【C】漫谈C语言随机数
  7. ESASP 业界第一个最为完善的 ASP MVC框架(待续)
  8. mac 下tomcat启动报错 unknown host
  9. 【jquery插件】收藏
  10. DDE复盘流程
  11. SharePoint 2016 配置应用程序商店
  12. javascript今生前世
  13. 记一次按需加载和npm模块发布实践
  14. attention 介绍
  15. Python中的格式化输出
  16. PHP7 网络编程(六)Socket和IO多路复用【待】
  17. myEclipse导入现成项目出现错误 【申明来源于网络】
  18. Codeforces Round #500 (Div. 2) D - Chemical table
  19. WCF学习笔记之序列化
  20. GridView 控制默认分页页码间距 及字体大小

热门文章

  1. hexo干货系列:(三)hexo的Jacman主题优化
  2. linux shell symbolic link & soft link, symbol link, link
  3. 准确率(Precision),召回率(Recall)以及综合评价指标(F1-Measure)
  4. [POJ2446] Chessboard(二分图最大匹配-匈牙利算法)
  5. 矩形周长(codevs 2149)
  6. Windows Server 2003的一些优化设置 (转至网络)
  7. UVA 861 组合数学 递推
  8. python 爬虫(转,我使用的python3)
  9. 火狐firefox、谷歌chrome等浏览器扩展、插件介绍
  10. 【APUE】wait与waitpid函数