django使用redis做页面静态化缓存

原创 257阅读 · 时间2019年5月8日 12:38

django使用redis做页面静态化缓存

最近,在做本站的时候,因为不缓存的话每次都从硬盘读取一次,浪费服务器资源、拖慢响应速度。而且数据更新频率较高,服务器负担比较大。想给首页等页面做一个缓存。为了加快服务器的速度,决定使用redis!

1.安装redis

windows下安装

redis本身不支持Windows平台,但为了方便调试,微软做了一款在Windows上的redis.

下载地址:https://github.com/MicrosoftArchive/redis/releases

基本就是点击下一步安装。 在安装中别忘记 勾选 添加到变量到系统环境中去。

安装完成后,进入cmd。

输入 redis-server 命令查看是否可以使用。不可以则重启一下即可。

直接输入 redis-server 命令使用的配置文件是安装目录下的 redis.windows.conf 文件。 

若提示错误 “ConnectionError: Error 10061 connecting to None:6379”,可以如下操作,打开cmd输入如下命令:

redis-cli shutdown1

再执行 redis-server 即可。 


Ubuntu下安装

sudo apt-get install redis-server

安装完成后,Redis服务器会自动启动,我们检查Redis服务器程序

ps -aux|grep redis
redis    30543  0.1  0.7  37228  6724 ?        Ssl  14:03   0:00 /usr/bin/redis-                     server 127.0.0.1:6379
root     30660  0.0  0.1  11288   924 pts/1    S+   14:04   0:00 grep --color=au                     to redis

通过命令行客户端访问

redis-cli

# 设置k-v记录
127.0.0.1:6379> set key1 "helloword"
OK
# 根据键查找记录
127.0.0.1:6379> get key1
"helloword"
# 展示所有的键
127.0.0.1:6379> keys *
1) "key1"
# 删除键
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)

2,Redis访问控制


默认情况下,访问Redis服务器不需要密码,为了让其他服务器使用同时增加安全性我们需要设置Redis服务器的访问密码。设置访问密码为yourpassword。 

由于redis默认绑定本机的,所以第一步取消该设置:

sudo vim /etc/redis/redis.conf

用vim打开该配置文件,然后注释掉下面这行:

# bind 127.0.0.1

然后设置登密码,用vim打开配置文件,配置文件较长,命令模式下输入/requirepass foobared快速搜索该配置项:

# 编辑配置文件
sudo vim /etc/redis/redis.conf
# 找到下面这一行并去除注释(可以搜索requirepass)我的 是396行
# requirepass foobared 未修改之前
# 修改之后
requirepass manbanzhen  # manbanzhen是我的redis密码

修改后重启服务器使配置生效:

sudo /etc/init.d/redis-server restart
[ ok ] Restarting redis-server (via systemctl): redis-server.service.

此时在登录redis,权限被控制

 redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.

用密码登录,具有权限

redis-cli -a 941020
127.0.0.1:6379> keys *
1) "key2"

通过以下命令从另一台linux服务器访问redis,password替换为你的密码,host替换为要访问的服务器

redis-cli -a password -h hostip

数据库的数量是可以配置的,不知道数据库就是数据库0,默认情况下是16个。修改redis.conf下的databases指令:

databases 64


3,安装django-redis和settings配置

pip install django-redis

settings.py中加入以下内容,your_host_ip换成你的服务器地址,yoursecret换成你的服务器密码

CACHES = {
   'default': {
       'BACKEND': 'django_redis.cache.RedisCache',
       'LOCATION': 'redis://your_host_ip:6379',
    "OPTIONS": {
        "CLIENT_CLASS": "django_redis.client.DefaultClient",
      "PASSWORD": "yoursecret",
    },
  },
}

REDIS_TIMEOUT=7*24*60*60
CUBES_REDIS_TIMEOUT=60*60
NEVER_REDIS_TIMEOUT=365*24*60*60

cache中的是必须的,下面三条可有可无

4,测试缓存是否成功

本步骤非必须,只是为了测试看可否正常使用redis。 

进入django的后台命令模式:

python manage.py shell

逐条输入如下命令测试:

from django.core.cache import cache     # 引入缓存模块
    cache.set('v', '555', 60*60)       # 写入key为v,值为555的缓存,有效期30分钟
    cache.has_key('v')             # 判断key为v是否存在
    cache.get('v')               # 获取key为v的缓存

5.配置django

现在redis和django的缓存配置已经OK,现在进行页面缓存的静态化处理。

(1) .我们在我们app内的views.py中,键入如下代码:

from django.core.cache import cache
from . import models
def getAllArticles(ischange = False):
    # 首先,从缓存中去查找数据
    articles = cache.get("allArticle")
    # 如果没查到 或 数据有变更 查询数据保存缓存中
    if articles == None or ischange == True:
    articles = models.Article.objects.all()
    cache.set("allArticle", articles)
    return articles

(2). 在我们需要的功能中添加缓存

      首页展示文章:

def index(request):
    # 首页不需改变,直接引用
    articles = getAllArticles()
    return render(request, "blog/index.html", {"articles": articles })

      添加文章,更新缓存数据


def add_article(request):
    # 接收文章信息
    title = request.POST['title']
    content = request.POST['content']
    # 保存文章
    article = models.Article(title=title, content= content)
    article.save()
    # 添加文章后,更新缓存
    getAllArticles(ischange=True)
    # 返回
    return JsonResponse({"msg":"文章添加成功", "success": True})


参考链接:https://blog.csdn.net/sinat_29699167/article/details/79699200

             收工!             




评论

本站升级中... 如有好的建议请加入QQ群!

相关文章推荐 ?
近七日热文推荐 !
回到顶部