大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程的进阶版。
在之前《用Django全栈开发》系列专辑里面,皮爷详细的阐述了如何编写一个完整的网站。
从进阶篇开始,每一篇文章都是干货满满。这一节,我们来继续说,在Django中,如何来管理Redis缓存
获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』
皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码对应的Tag是“Advanced_05”。
在上一节,我们讲述了如何在Django中使用Redis作缓存,主要步骤:
django-redis
;settings.py
文件中,设置CACHES
变量;django.core.cache
中的cache.get(key)
和cache.set(key,value,expire_time)
方法来实现读取缓存和设置缓存。这些通过cache.set()方法设置的缓存,都会在我们的Redis里面有对应的key-value值。我们今天就要说一下如何用Django来控制一下这些缓存。
既然我们要管理我们的缓存,而且这些缓存是在我们的服务器中的Redis中,所以,这里我们如果要管理缓存的话,最好的办法就是在我们的CMS中,写一个缓存管理系统。
不知道大家是否看过《用Django全栈开发》这个系列的教程,里面的第20篇《 用Django全栈开发——友链一条龙全套开发》,里面很详细的介绍了那种增删改查的管理系统是怎么写的。
我们这里的缓存管理非常的简单,只有查看
和删除
这两个功能。
我们这里来简单阐述一下缓存管理的原理:
其实,上面的两个对应的就是我们之前说的查看和删除。
接下来,我们就要来按照之前的CMS开发流程,编写我们的缓存管理系统了。
缓存的查看,我们可以通过以下核心代码来实现:
def get_cache_keys_object():
cache_item_list = list()
try:
keys_list = cache.keys("*")
for key in keys_list:
ttl = cache.ttl(key)
item = dict()
item['key'] = key
item['ttl'] = num_to_time(ttl)
cache_item_list.append(item)
except:
pass
return cache_item_list
这里的思路就是,使用cache.keys("*")
来获取缓存中全部的key-value键值对,然后调用cache.ttl(key)
来获取缓存剩余时间数值,然后将所有的结果封装返回。
所以,这里,前端我们的缓存管理的html文件简单写一下:
<table class="table table-bordered table-hover">
<thead class="thead-light">
<tr>
<th>Keyth>
<th>Ttlth>
<th width="25%">actionsth>
tr>
thead>
<tbody>
{% for item in list_data %}
<tr>
<td>{{ item.key }}td>
<td>{{ item.ttl }}td>
<td>
<a href="{% url 'cms:cache_item_clear' %}?cache_key={{ item.key }}" class="btn btn-danger btn-xs delete-btn">
Clear
a>
td>
tr>
{% endfor %}
tbody>
table>
用一个table列表来展示我们的cache内容,非常的简单,我们编写完成之后,前端的样子就长下面这个样子:
缓存的删除,我们主要依据的原理就是:
cache.delete(cache_key)
只需要从前端将cache_key
传到后端就可以,然后后端直接调用这个方法删除即可。
我们需要做的就是从怎么从前端传给后端,这里我们的办法是直接写成URL的格式。上面的:
<a href="{% url 'cms:cache_item_clear' %}?cache_key={{ item.key }}" class="btn btn-danger btn-xs delete-btn">
Clear
a>
就是干这个的。
首先我们看一下上篇文章我们添加的JpEarth地震信息的缓存,只需要进入数据中心,访问一下页面即可,这样数据就缓存起来了。
看到数据源来自Cache,则说明我们的缓存里面已经有数据了。
这个时候,我们回到缓存管理界面:
当我们点击clear按键,然后就会看到我们的缓存被清除了:
我们再次回到之前的缓存页面,刷新一下,就应该看到数据模式被改成了Database:
好了,这样就说明,我们的缓存管理已经成功了。
对于一个网站而言,缓存其实是一种策略,涉及到缓存的更新,缓存的时间还有缓存的位置。所以,根据自己的需求,要针对不同的部分定制不同的缓存策略才可以。
其实文章写道这里,有些人就会疑问我们应该什么时候更新,删除旧的缓存啊?
这里有两种,一种是每次更新系统数据的时候,在代码里面直接用cache.delete()方法删除旧的缓存;另一种则是,更新完数据之后,直接自己手动删除数据,就是通过自己写的缓存管理系统来实现的。
还是根据个人需求,应情况而定。
最后总结一下,
在Django中管理Redis缓存:
Cache.delete()
;cache.keys("*")
方法,可以获取系统中所有的缓存的key;cache.ttl(key)
方法,可以获取key值对应的缓存信息的剩余缓存时间;cache.delete(key)
方法,删除就的缓存;获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』
长按下图二维码关注,如文章对你有启发或者能够帮助到你,欢迎点赞,在看,转发三连走一发,这是对我原创内容输出的最大肯定。