1、首先安装redis,ubuntu下执行以下命令

sudo  apt-get  install  redis-server

2、安装redis库

pip install django-redis

3、配置django中的settings

caches={

‘default’:{

‘backend’:‘redis_caches.cache.RedisCache’,

'location':127.0.0.1:9999  #redis服务ip和端口,

‘option’:{

'client_class':'redis_cache.client.DefaultClient',

},

},

}

REDIS_TIMEOUT=7*24*60*60

CUBES_REDIS_TIMEOUT=60*60

NEVER_REDIS_TIMEOUT=365*24*60*60

#其实只是需要CACHES中的那几条就可以了,后面这三句可以不需要的,只是我后面的例子里需要用到,我就在这里配置了。

3、进行读写操作

from django.conf  import settings

from django.core.cache import cache

#read cahce user_id

def read_from_cache(self,username)

key='user_id_of'+username

value=cache.get(key)

if value==none:

data=none

else:

date=json.loads(value)

return data

#write cahche

def write_to_cache(self,username)

key='user_id_of'+username

cache.set(key,json.dumps(username),settint.NEVER_REDIS_TIMEOUT)

4、

通过上面的这两个方法就可以实现对redis的读取操作了,只需要将需要的字段当参数传入到方法中就好了。

那么之前提到的memcached呢?其实也是一样的配置:

CACHES = {

    'default': {

        'BACKEND''django.core.cache.backends.memcached.MemcachedCache',

        'LOCATION''127.0.0.1:11211',

    }

}

当然用法也是和我上面的例子是一样的了。其实对于redis这样的缓存服务器来说,配置都是很简单的,而具体的使用也不难,官网上面也有很多简单明了的例子可以供我们参考,只有一点需要注意的,那就是对于要将什么样的信息保存到redis才是我们真正需要关心的。

5、使用缓存redis开发博客系统

Django开发博客系统redis缓存

Redis 是一个高性能的key-value数据库。redis的出现, 很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。 它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

目前Redis已经发布了3.0版本,正式支持分布式,这个特性太强大,以至于你再不用就对不住自己了。

性能测试

服务器配置:Linux 2.6, Xeon X3320 2.5Ghz

SET操作每秒钟110000次,GET操作每秒钟81000次

stackoverflow网站使用Redis做为缓存服务器。

安装redis

服务器安装篇我写了专门文章, 请参阅redis入门与安装

django中的配置

我们希望在本博客系统中,对于文章点击数、阅览数等数据实现缓存,提高效率。

requirements.txt

添加如下内容,方便以后安装软件依赖,由于在pythonanywhere上面并不能安装redis服务,所以本章只能在本地测试。

redis==2.10.5
django-redis==4.4.2
APScheduler==3.1.0

settings.py配置

新增内容

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
from urllib.parse import urlparse
import dj_database_urlredis_url = urlparse(os.environ.get('REDISTOGO_URL', 'redis://localhost:6959'))
CACHES = {'default': {'BACKEND': 'redis_cache.cache.RedisCache','LOCATION': '{0}:{1}'.format(redis_url.hostname, redis_url.port),'OPTIONS': {'DB': 0,'PASSWORD': redis_url.password,'CLIENT_CLASS': 'redis_cache.client.DefaultClient','PICKLE_VERSION': -1,  # Use the latest protocol version'SOCKET_TIMEOUT': 60,  # in seconds'IGNORE_EXCEPTIONS': True,}}
}SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'# 本地开发配置放在local_settings.py中
try:from .local_settings import *
except ImportError:pass

local_settings.py配置

这个是本地开发时候使用到的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DEBUG = TrueCACHES = {'default': {'BACKEND': 'redis_cache.cache.RedisCache','LOCATION': '192.168.203.95:6379:1','OPTIONS': {'CLIENT_CLASS': 'redis_cache.client.DefaultClient',# 'PASSWORD': 'secretpassword','PICKLE_VERSION': -1,  # Use the latest protocol version'SOCKET_TIMEOUT': 60,  # in seconds'IGNORE_EXCEPTIONS': True,}}
}

使用方法

cache_manager.py缓存管理器

我们新建一个缓存管理器cache_manager.py,内容如下

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
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Topic: redis缓存管理器
"""
from ..models import Post
from redis_cache import get_redis_connection
from apscheduler.schedulers.background import BackgroundSchedulerRUNNING_TIMER = False
REDIS_DB = get_redis_connection('default')def update_click(post):""" 更新点击数 """if REDIS_DB.hexists("CLICKS", post.id):print('REDIS_DB.hexists...' + str(post.id))REDIS_DB.hincrby('CLICKS', post.id)else:print('REDIS_DB.not_hexists...' + str(post.id))REDIS_DB.hset('CLICKS', post.id, post.click + 1)run_timer()def get_click(post):""" 获取点击数 """if REDIS_DB.hexists("CLICKS", post.id):return REDIS_DB.hget('CLICKS', post.id)else:REDIS_DB.hset('CLICKS', post.id, post.click)return post.clickdef sync_click():"""同步文章点击数"""print('同步文章点击数start....')for k in REDIS_DB.hkeys('CLICKS'):try:p = Post.objects.get(k)print('db_click={0}'.format(p.click))cache_click = get_click(p.id)print('cache_click={0}'.format(cache_click))if cache_click != p.click:p.click = get_click(p.id)p.save()except:pass

views.py修改

然后我们修改view.py,在相应的action里使用这个cache_manager:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from .commons import cache_managerdef post_list(request):"""所有已发布文章"""posts = Post.objects.annotate(num_comment=Count('comment')).filter(published_date__isnull=False).prefetch_related('category').prefetch_related('tags').order_by('-published_date')for p in posts:p.click = cache_manager.get_click(p)return render(request, 'blog/post_list.html', {'posts': posts})def post_detail(request, pk):try:passexcept:raise Http404()if post.published_date:cache_manager.update_click(post)post.click = cache_manager.get_click(post)

来源:https://www.cnblogs.com/lcosima/p/7061666.html

django连接redis(文章看着不错)相关推荐

  1. django连接redis 集群(安装redis的相关包的时候亲测)

    本地环境: python3.7 Django== 2.2.3 django-cluster-redis== 1.0.5 django-redis== 4.10.0 redis== 3.0.1 redi ...

  2. Django 连接redis

    安装: pip install django-redis redis安装: docker pull redis:latest docker run -d --name redis -p 6379:63 ...

  3. Django 多数据库联用(看着不错还有源码可以下载)

    本文讲述在一个 django project 中使用多个数据库的方法, 多个数据库的联用 以及多数据库时数据导入导出的方法. 直接给出一种简单的方法吧,想了解更多的到官方教程,点击此处 代码文件下载: ...

  4. nginx + uWSGI 提高 Django的并发性(看着不错)

    1. uWSGI : uWSGI是一个web服务器,实现了WSGI协议.uwsgi协议.http协议等. uWSGI的主要特点是: 超快的性能 低内存占用 多app管理 详尽的日志功能(可以用来分析a ...

  5. redis:redis介绍和安装、普通连接和连接池、redis 5大数据类型之字符串、Hash、列表、其他操作(通用)、管道、django使用redis、接口缓存

    目录 一. redis介绍和安装 二. 普通连接和连接池 三. redis 5大数据类型之字符串 四. redis 5大数据类型之Hash 五. redis 5大数据类型之列表 六. 其他操作(通用) ...

  6. redis怎么连接mysql数据库_Golang连接Redis数据库的方法

    Golang连接Redis数据库 golang连接数据库,这里博主推荐使用go-redis这个库,理由很简单(连接数据库的操作类似在数据库里面输入命令) go-redis的安装方式 go get -v ...

  7. java连接redis不稳定_java相关:jedispool连redis高并发卡死的问题

    java相关:jedispool连redis高并发卡死的问题 发布于 2020-6-30| 复制链接 本篇文章主要介绍了jedispool连redis高并发卡死的问题,小妖觉得挺不错的,现在分享给大家 ...

  8. 99. 中高级开发面试必问的Redis,看这篇就够了

    中高级开发面试必问的Redis,看这篇就够了! 一.概述 二.数据类型 STRING LIST SET HASH ZSET 三.数据结构 字典 跳跃表 四.使用场景 计数器 缓存 查找表 消息队列 会 ...

  9. C++连接redis数据库(自学笔记)

    一.本文仅做自学笔记用 本文内容参考redis使用c++ API 的hiredis连接详解 C++连接redis数据库需要用到hiredis头文件,最近因为写程序需要用到这方面的知识.上面博文内容较多 ...

最新文章

  1. 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)
  2. 计算机自动连续工作的基础是存储程序原理,计算机的存储程序工作原理是什么...
  3. OpenGL基于PBR的irradiance辐照度的实例
  4. GCN(一)数据集介绍
  5. 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书
  6. [LeetCode] One Edit Distance 一个编辑距离
  7. 分布式存储系统学习笔记(二)—分布式文件系统(1)—Google文件系统GFS
  8. 数字电路实验怎么接线视频讲解_铆钉是怎么被铆接的,多种铆钉动画演示(内附视频讲解)...
  9. 短视频Go研发框架实践-hulk
  10. 矩阵直接分解法matlab,矩阵直接三角分解法
  11. c语言中要求五个数一行,c 语言中如何一行输出五个数
  12. 最贴心的2016赏樱攻略,错过一次,又等一年!
  13. 不同性能测试工具的并发模式
  14. 树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译:
  15. Python—遇到的问题,使用PyPDF2转化pdf时候遇到的各种问题。
  16. 杭电2019多校第三场 HDU-6608 Fansblog(威尔逊定理+大数判素数+逆元)
  17. 色彩空间与色彩模型 RGB/CMYK/YCbCr/HSB/HSI/HSV
  18. VS2019_Windows桌面应用程序_01
  19. 简单的商品信息爬虫——爬易迅网
  20. 给员工的一封信:在职业生涯规划的框架中工作

热门文章

  1. c++派生类的访问控制
  2. C语言和C++语言关系
  3. 经典C语言程序100例之八八
  4. C/C++ 给Python写扩展模块
  5. python条件控制语句_Python课堂笔记 条件控制语句
  6. gitlab 开源项目 星_49必须了解的机器学习开源项目,Github上平均3600星
  7. web展现mysql_web页面实现LED跑马灯效果(涉及web前端、原生JS、PHP、mysql)
  8. 02_pandas获取数据(指定列获取、[]方式获取、loc函数,at函数, iloc函数 iat函数)
  9. 通过16进制文件头判断文件类型
  10. 在OpenCV环境下对图像做Gamma校正