用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存

大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程的进阶版

在之前《用Django全栈开发》系列专辑里面,皮爷详细的阐述了如何编写一个完整的网站。

从进阶篇开始,每一篇文章都是干货满满。这一节,我们来继续说,在Django中,如何来管理Redis缓存

获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』

皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码对应的Tag是“Advanced_05”。

用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存_第1张图片

前瞻回顾

在上一节,我们讲述了如何在Django中使用Redis作缓存,主要步骤:

  1. 安装django-redis
  2. settings.py文件中,设置CACHES变量;
  3. 通过调用django.core.cache中的cache.get(key)cache.set(key,value,expire_time)方法来实现读取缓存和设置缓存。

这些通过cache.set()方法设置的缓存,都会在我们的Redis里面有对应的key-value值。我们今天就要说一下如何用Django来控制一下这些缓存。

缓存控制系统的开发

既然我们要管理我们的缓存,而且这些缓存是在我们的服务器中的Redis中,所以,这里我们如果要管理缓存的话,最好的办法就是在我们的CMS中,写一个缓存管理系统。

不知道大家是否看过《用Django全栈开发》这个系列的教程,里面的第20篇《 用Django全栈开发——友链一条龙全套开发》,里面很详细的介绍了那种增删改查的管理系统是怎么写的。

我们这里的缓存管理非常的简单,只有查看删除这两个功能。

我们这里来简单阐述一下缓存管理的原理:

  • 首先我们的缓存存储在Redis中;
  • Django可以通过API获取cache的keys,并且可以通过cache.delete()方法来清空缓存;

其实,上面的两个对应的就是我们之前说的查看和删除。

接下来,我们就要来按照之前的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内容,非常的简单,我们编写完成之后,前端的样子就长下面这个样子:

用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存_第2张图片

缓存的删除

缓存的删除,我们主要依据的原理就是:

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地震信息的缓存,只需要进入数据中心,访问一下页面即可,这样数据就缓存起来了。

用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存_第3张图片

看到数据源来自Cache,则说明我们的缓存里面已经有数据了。

这个时候,我们回到缓存管理界面:

用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存_第4张图片

当我们点击clear按键,然后就会看到我们的缓存被清除了:

用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存_第5张图片

我们再次回到之前的缓存页面,刷新一下,就应该看到数据模式被改成了Database:

用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存_第6张图片

好了,这样就说明,我们的缓存管理已经成功了。

多说一句

对于一个网站而言,缓存其实是一种策略,涉及到缓存的更新,缓存的时间还有缓存的位置。所以,根据自己的需求,要针对不同的部分定制不同的缓存策略才可以。

其实文章写道这里,有些人就会疑问我们应该什么时候更新,删除旧的缓存啊?

这里有两种,一种是每次更新系统数据的时候,在代码里面直接用cache.delete()方法删除旧的缓存;另一种则是,更新完数据之后,直接自己手动删除数据,就是通过自己写的缓存管理系统来实现的。

还是根据个人需求,应情况而定。

技术总结

最后总结一下,

在Django中管理Redis缓存:

  1. 管理Redis缓存,核心思想就是Cache.delete()
  2. 通过cache.keys("*")方法,可以获取系统中所有的缓存的key;
  3. 通过cache.ttl(key)方法,可以获取key值对应的缓存信息的剩余缓存时间;
  4. 调用cache.delete(key)方法,删除就的缓存;
  5. 缓存的管理系统实现思路还有方法,可以参考《用Django全栈开发——20.友链一条龙全套开发》文章中的实现方法;
  6. 进阶篇的在Django中管理Redis缓存总结完毕。

获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』

长按下图二维码关注,如文章对你有启发或者能够帮助到你,欢迎点赞在看转发三连走一发,这是对我原创内容输出的最大肯定。

用Django全栈开发(进阶篇)——05. 在Django中管理Redis缓存_第7张图片

你可能感兴趣的:(Django,Peekpa.com,Python)