Redis应用与自己的python+django项目

(一)Redis安装
(1)windows下安装Redis

下载安装包解压后运行redis-server.exe redis.conf即可运行

(2)linux如centos下暗装Redis

下载如下

wget http://download.redis.io/releases/redis-5.0.6.tar.gz
tar xzf redis-5.0.6.tar.gz
cd redis-5.0.6
make
make test
make install

启动

cd utils/ ; ./install_server.sh

可以注释掉 vim /etc/redis/6379.conf 的配置文件下面这三行,禁止内存数据到磁盘,如果只是把Redis作为缓存使用

save 900 1
save 300 10
save 60 10000

在这里插入图片描述

(2)安装django-redis

在django的settings.py中增加如下配置,可以放在database数据库下

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

location后面的6379/1的/1指的是DB number,指定redis的数据库号

(3)代码使用缓存

首先在settings的下建一个class CK:
假定我们这里有list_medicine,list_customer两个数据

 记录全局的缓存key,防止重复
class CK:
    # 列出药品 的 缓存 key 
    MedineList   = 'list_medicine'
    # 列出客户 的 缓存 key 
    CustomerList = 'list_customer'

在自己项目的Medinelist与customer两处,导入settings与redis的连接

from django_redis import get_redis_connection
from django import settings

(4)项目部分代码展示

from django_redis import get_redis_connection
from django import settings
import json

#获取一个和Redis服务的连接

rconn = get_redis_connection("default")

def list_medicine(request):


 try:
		#请求的参数
		keywords = request.params.get(‘keywords’,None)
		pagenum = request.parms.get(‘pagenum’)
		pagesize = request.parms.get(‘pagesize’)


		#验证是cacheobj是否有缓存
		cachefield = f’{pagenum}|{pagesize}|{keywords}‘
		cacheobj = rconn.hget(settings.CK.Medinelist,
								cachefield)			
		
		#如果有缓存
		if cacheobj:
		
					#这个print验证加载已有缓存
					print(‘加载已有缓存’)
					return json.loads(cacheobj)

		else:
					
					#验证无缓存处
					print(‘初次加载缓存’)

				   #分页,Queryset对象转换为list
				   pgnt = paginator(qs,pagesize)
				   page = pgnt.page(pagenum)
				   retlist = list(page)
				
				   #此处为项目传给前端的json格式
				   retobj = {‘ret’:0,‘retlist’:retlist,‘total’:pgnt.count}

				   #存入缓存
				   rconn.set(settings.CK.Medinelist,
				   					cachefield,
				   					json.dumps(retobj))
				
				   return	JsonResponse(retobj)		   

except Emptypage:

			return JsonResponse({‘ret’:0,‘retlist’:retlist,‘total’:0})

except:
				
			print(traceback.format_exc())
        	return JsonResponse({'ret': 2,  'msg': f'未知错误\n{traceback.format_exc()}'})

为了验证是否为初次加载缓存,在此处修改加上 rconn.delete(settings.CK.MedineList)

if cacheObj:
    print('加载已有缓存')
    retobj = json.loads(cacheObj)
    rconn.delete(settings.CK.MedineList)

连续访问两次该界面发现redis库已成功使用
在这里插入图片描述

对于增删改也同样,在返回json值的前一步加上

 rconn.delete(settings.CK.MedineList)

就可以保证,在增删改一个数据后,界面的缓存得以清除以便访问时候更新缓存,避免缓存的数据与实际数据滞后、不符的现象了

同样修改另一个客户类的代码

在这里插入图片描述
再依次添加更改项目其它需要redis库的地方即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值