django连接redis(文章看着不错)
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呢?其实也是一样的配置:
|
当然用法也是和我上面的例子是一样的了。其实对于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(文章看着不错)相关推荐
- 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 ...
- Django 连接redis
安装: pip install django-redis redis安装: docker pull redis:latest docker run -d --name redis -p 6379:63 ...
- Django 多数据库联用(看着不错还有源码可以下载)
本文讲述在一个 django project 中使用多个数据库的方法, 多个数据库的联用 以及多数据库时数据导入导出的方法. 直接给出一种简单的方法吧,想了解更多的到官方教程,点击此处 代码文件下载: ...
- nginx + uWSGI 提高 Django的并发性(看着不错)
1. uWSGI : uWSGI是一个web服务器,实现了WSGI协议.uwsgi协议.http协议等. uWSGI的主要特点是: 超快的性能 低内存占用 多app管理 详尽的日志功能(可以用来分析a ...
- redis:redis介绍和安装、普通连接和连接池、redis 5大数据类型之字符串、Hash、列表、其他操作(通用)、管道、django使用redis、接口缓存
目录 一. redis介绍和安装 二. 普通连接和连接池 三. redis 5大数据类型之字符串 四. redis 5大数据类型之Hash 五. redis 5大数据类型之列表 六. 其他操作(通用) ...
- redis怎么连接mysql数据库_Golang连接Redis数据库的方法
Golang连接Redis数据库 golang连接数据库,这里博主推荐使用go-redis这个库,理由很简单(连接数据库的操作类似在数据库里面输入命令) go-redis的安装方式 go get -v ...
- java连接redis不稳定_java相关:jedispool连redis高并发卡死的问题
java相关:jedispool连redis高并发卡死的问题 发布于 2020-6-30| 复制链接 本篇文章主要介绍了jedispool连redis高并发卡死的问题,小妖觉得挺不错的,现在分享给大家 ...
- 99. 中高级开发面试必问的Redis,看这篇就够了
中高级开发面试必问的Redis,看这篇就够了! 一.概述 二.数据类型 STRING LIST SET HASH ZSET 三.数据结构 字典 跳跃表 四.使用场景 计数器 缓存 查找表 消息队列 会 ...
- C++连接redis数据库(自学笔记)
一.本文仅做自学笔记用 本文内容参考redis使用c++ API 的hiredis连接详解 C++连接redis数据库需要用到hiredis头文件,最近因为写程序需要用到这方面的知识.上面博文内容较多 ...
最新文章
- 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)
- 计算机自动连续工作的基础是存储程序原理,计算机的存储程序工作原理是什么...
- OpenGL基于PBR的irradiance辐照度的实例
- GCN(一)数据集介绍
- 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书
- [LeetCode] One Edit Distance 一个编辑距离
- 分布式存储系统学习笔记(二)—分布式文件系统(1)—Google文件系统GFS
- 数字电路实验怎么接线视频讲解_铆钉是怎么被铆接的,多种铆钉动画演示(内附视频讲解)...
- 短视频Go研发框架实践-hulk
- 矩阵直接分解法matlab,矩阵直接三角分解法
- c语言中要求五个数一行,c 语言中如何一行输出五个数
- 最贴心的2016赏樱攻略,错过一次,又等一年!
- 不同性能测试工具的并发模式
- 树莓派配置https://www.raspberrypi.org/documentation/configuration/中的一个单词翻译:
- Python—遇到的问题,使用PyPDF2转化pdf时候遇到的各种问题。
- 杭电2019多校第三场 HDU-6608 Fansblog(威尔逊定理+大数判素数+逆元)
- 色彩空间与色彩模型 RGB/CMYK/YCbCr/HSB/HSI/HSV
- VS2019_Windows桌面应用程序_01
- 简单的商品信息爬虫——爬易迅网
- 给员工的一封信:在职业生涯规划的框架中工作
热门文章
- c++派生类的访问控制
- C语言和C++语言关系
- 经典C语言程序100例之八八
- C/C++ 给Python写扩展模块
- python条件控制语句_Python课堂笔记 条件控制语句
- gitlab 开源项目 星_49必须了解的机器学习开源项目,Github上平均3600星
- web展现mysql_web页面实现LED跑马灯效果(涉及web前端、原生JS、PHP、mysql)
- 02_pandas获取数据(指定列获取、[]方式获取、loc函数,at函数, iloc函数 iat函数)
- 通过16进制文件头判断文件类型
- 在OpenCV环境下对图像做Gamma校正