redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)

1 redis其它操作
2 redis管道

3 django中使用redis
3.1 通用方案
3.2 第三方模块

4 django缓存

5 celery介绍
5.1 celery的快速使用

1 redis其它操作

'''
delete(*names)
exists(name)
keys(pattern='*')
expire(name ,time)
rename(src, dst)
move(name, db))
randomkey()
type(name)
'''
# redis的key值,最大可以是多少? 最大不超过512M  一般 1KB
# redis的value值,最大可以是多少? 最大不超过512M
'''
delete(*names)
exists(name)
keys(pattern='*')
expire(name ,time)
rename(src, dst)
move(name, db))
randomkey()
type(name)
'''import redisconn=redis.Redis()
# delete(*names)
# conn.delete('userinfo2')# exists(name)
# print(conn.exists('name'))# keys(pattern='*')
# print(conn.keys('user*'))
# print(conn.keys('*'))
# print(conn.keys())# expire(name ,time)
# conn.expire('name',5)# rename(src, dst)
# conn.rename('userinfo3','us')# move(name, db))
# conn.move('us',3)# randomkey()
# print(conn.randomkey())# type(name)
# print(conn.type('hash2'))
print(conn.type('us'))conn.close()

2 redis管道

# 事务四大特性-原子性:要么都成功,要么都失败-一致性:数据前后要一致-隔离性:多个事务之间相互不影响-持久性:事务一旦完成,数据永久改变# 关系型数据库,支持事务  # redis 有没有事务?没有专门的事务,但是通过别的方式,可以实现事务的几个特性,所以咱们认为它具备事务-redis要支持事务,要完成事务的几大特性,需要使用管道来支持-单实例redis是支持管道的-集群模式下,不支持管道,就不支持事务import redisconn = redis.Redis()
# 没有管道的情况
# conn.decrby('my_money', 10)
# # 如果出现这种情况会报错:
# # 我的钱扣了,但是有别的逻辑插入,我的钱响应的会扣,但是对方的账户却没有加上我转出去的钱
# l = [0, 1, 2]
# print(l[9])
# conn.incrby('zs_money', 10)# 或者写成
# conn.set('my_money', 90)
# conn.set('zs_money', 110)## 通过管道实现事务
pipline = conn.pipeline()
# 创建了一个管道,把命令都一个个放到管道中,先不执行,当执行execute,才会执行管道中所有的命令
pipline.decrby('my_money', 10)
l = [0, 1, 2]
print(l[9])
pipline.incrby('zs_money', 10)
# 只有执行了这句代码,管道中才会真正的执行
pipline.execute()
conn.close()-------------------------------------------------------------------### 通过管道实现事务
conn = redis.Redis()
pipline = conn.pipeline(transaction=True)
## 创建了一个管道,把命令都一个个放到管道中,先不执行,当执行execute,才执行管道中所有的命令
pipline.decrby('my_money', 10)
# 我的钱扣了,写了点别的逻辑--》有可能抛异常
l = [0, 2, 3]
print(l[0])pipline.incrby('zs_money', 10)pipline.execute()conn.close()

3 django中使用redis

3.1 通用方案

# 写一个池
import redisPOOL = redis.ConnectionPool(max_connections=20)# 在要使用的地方,导入使用即可
def redis_demo(requset):conn = redis.Redis(connection_pool=POOL, decode_responses=True)res = conn.incrby('count')print(res)return HttpResponse(f'您是我们第:{res}个用户')

3.2 第三方模块

# django-redis ---》配置文件中配置即可
pip install django-redis# 配置文件配置
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient","CONNECTION_POOL_KWARGS": {"max_connections": 100}# "PASSWORD": "123",}},
}# 在使用的位置,导入使用
from django_redis import get_redis_connection
def redis_demo(requset):conn = get_redis_connection()res = conn.incrby('count')print(res)return HttpResponse(f'您是我们第:{res}个用户')

4 django缓存

# redis数据存在内存中,取放速度快---》非常适合做缓存本来数据在mysql中,每次都查询,速度慢---》把查询出来的数据,暂时存储到redis(缓存),下次请求再来,直接从redis中拿,速度就会很快# django中如何使用缓存-配置文件配置(缓存位置:内存,文件中,redis中)CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient","CONNECTION_POOL_KWARGS": {"max_connections": 100}# "PASSWORD": "123",}-把数据放到缓存中(放到redis中)from django.core.cache import cachecache.set(key,value可以是任意类型,过期时间)-redis只支持5大数据类型,可以放python的任意类型-本质:pickle序列化---bytes格式---》以redis字符串的形式放在了redis中cache.get(key)# 后期咱么在项目中,使用redis作为django的缓存,多一些,尽量不使用原生redis操作# 前后端分离中,使用 cache.set   cache.get   
# 前后端混合中可以整站缓存 可以要缓存一个页面可以缓存页面中的某个位置
# 可以缓存的位置:内存中本地文件中数据库中reids中 (咱们用的多)
# 测试缓存---django的缓存----可以发个任意,但是redis就不能
class Person:passdef cache_demo_set(request):# cache.set('count', 100, 5)  # 往缓存中放了count为100,5秒后过期# cache.set('count', [1, 2, 'hello', '你好'], 5)# cache.set('count', {'name': 'ldj', 'age': 19}, 5)p = Person()p.name = 'ldj'cache.set('count', p)return HttpResponse('缓存成功')def cache_demo_get(request):# print(cache.get('count'))print(cache.get('count').name)return HttpResponse('获取成功')

5 celery介绍

Celery 官网:http://www.celeryproject.org/
Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html
Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/# celery是什么?分布式异步任务框架:第三方框架,celery翻译过来是芹菜,吉祥物就是芹菜项目中使用异步任务的场景,可以使用它之前做异步,如何做? 异步发送短信---》开启多线程---》不便于管理# celery有什么作用?-执行异步任务-执行延迟任务-执行定时任务
# celery原理
1)可以不依赖任何服务器,通过自身命令,启动服务
2)celery服务为为其他项目服务提供异步解决任务需求的
注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求人是一个独立运行的服务 | 医院也是一个独立运行的服务正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求django如果不用异步,正常运行即可,如果想做异步,就借助于 celery来完成# celery架构-broker:消息中间件,任务中间件(消息队列:redis,rabbitmq)django要做异步,提交任务到 任务中间件中(redis),存储起来Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等-worker:任务执行者,任务执行单元不停的从任务中间件中取任务,执行Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中-banckend:结果存储,任务结果存储把任务执行结果(函数返回值),存放到结果存储中(redis)用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等###  任务中间件:redis
###  结果存储:redis

在这里插入图片描述

5.1 celery的快速使用

# 0 开源的,小组织,不支持win,不要就win的问题展开讨论了win上:需要借助于第三方##### 1 安装:pip install celery  # 最新 5.3.4
###### 2 写代码 main.py
import time
from celery import Celery
# 1 实例化得到对象
broker = 'redis://127.0.0.1:6379/1'  # 消息中间件 redis
backend = 'redis://127.0.0.1:6379/2'  # 结果存,用redis
app = Celery('app', broker=broker, backend=backend)# 编写任务,必须用app.task 装饰,才变成了celery的任务
@app.task
def send_sms():time.sleep(1)print('短信发送成功')return '手机号短信发送成功'#### 3 提交任务,使用别的进程
from main import send_sms
res=send_sms.delay() 
print(res)### 4 启动worker---》可以在3之前
# windows:
pip3 install eventlet
celery  -A main worker -l info -P eventlet
# mac  linux
# celery -A main worker -l info### 5 worker就会执行任务,把执行的结果,放到结果存储中### 6 查看结果 
from celery.result import AsyncResult
from main import app
id = '92987636-ae9e-4be9-828b-8c2d10fe066a'
if __name__ == '__main__':a = AsyncResult(id=id, app=app)if a.successful():result = a.get()print(result)elif a.failed():print('任务失败')elif a.status == 'PENDING':print('任务等待中被执行')elif a.status == 'RETRY':print('任务异常后正在重试')elif a.status == 'STARTED':print('任务已经开始被执行')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

COCO数据集解析

介绍 官网:https://cocodataset.org/ 下载地址:https://cocodataset.org/#download COCO的全称是Common Objects in COntext,起源于微软于2014年出资标注党的Microsoft COCO数据,与ImageNet竞赛一样,是计算机视觉领域…

安卓14通过“冻结”缓存应用程序腾出CPU,提高性能和内存效率

本月早些时候,我们听说更新到安卓14似乎提高了谷歌Pixel 7和Pixel 6的效率——提高了电池寿命,并在这个过程中减少了热量的产生。现在看来,安卓14的增效功能细节已经公布。 安卓侦探Mishaal Rahman在X(前身为Twitter)…

阿里云优惠口令(2023更新)

2023年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续…

工程企业管理软件源码-综合型项目管理软件

工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

Android12之DRM架构(一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

初识容器Docker

目前使用 Docker 基本上有两个选择:Docker Desktop和Docker Engine。Docker Desktop 是专门针对个人使用而设计的,支持 Mac 和 Windows 快速安装,具有直观的图形界面,还集成了许多周边工具,方便易用。 不是太推荐使用D…

摩尔信使MThings的实时数据曲线

摩尔信使MThings配备了毫秒级的实时数据录波功能,提供了多种展示模式,包括:固定时间范围、示波器等; 用户可以添加实时数据警戒线,直观呈现异常数据; 用户可以灵活的缩放、拖动曲线数据,可以指…

C++对象模型(17)-- 构造函数语义学:成员初始化列表

1、必须用初始化列表的场景 (1)成员变量是引用类型,必须在初始化列表中初始化。 (2)成员变量是const类型,必须在初始化列表中初始化。 (3)如果类继承自一个父类,并且父…

前端自学需要把大量时间放在 HTML、CSS 吗?

前言 html和css其实不需要花费太多的时间,html暂且不说,css各类的属性太多了,平时如果只是简单做一些小网站根本不需要全部掌握,只需要掌握一些基础常用的即可,一般遇到不会的也可以直接查文档,就我个人来…

主打的就是一蠢

var x "abc"; // 不清楚x的用途function a(b, c, d) {// 一堆未注释的代码...// ... }// 混合使用单引号和双引号 var message "Its a beautiful day!";fetch("https://xxx/api/data").then(response > response.json()).then(data > {/…

三级等保-linux服务器三权分立设置

安全问题 安全控制点 风险分析 风险等级 标准要求 加固建议 服务器未严格按照系统管理员权限、审计管理员权限、安全管理员权限进行分配管理员账户,未实现管理员用户的最小权限划分。 访问控制 可能存在管理员越权操作的风险 中 d)应授予管理用户所需的最…

Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!

先上效果图 插件安装 先说 word 文件是docx-preview插件 excel文件是用 xlsx 插件 介绍后端返回的数据 因为在拦截器处 做了对数据的处理 最后你调接口拿到的数据是 一个对象 里面包含: url : blob对象转换的用于访问Blob数据的临时链接。这个链接可以被用于在网页中展示…

Spring MVC(一)【什么是Spring MVC】

重点 Spring:IOC 和 AOP 。 Spring MVC :Spring MVC 的执行流程。 SSM 框架的整合! Spring 和 Mybatis 我们不建议使用太多注解,Spring MVC 建议全部使用注解开发! 1、MVC 回顾 1.1、什么是MVC MVC是模型(Model)…

藏在超级应用背后的逻辑和哲学

众所周知,Elon Musk 想将 Twitter 重新设计定位成一款“超级应用 - X”的野心已经不再是秘密。伴随着应用商店中 Twitter 标志性的蓝鸟 Logo 被 X 取代后,赛博世界充满了对这件事情各种角度的探讨与分析。 Musk 曾经无数次通过微信这一样本来推广他的“超…

Linux:命令行参数和环境变量

文章目录 命令行参数环境变量环境变量的概念常见的环境变量PATH 环境变量表本地变量和环境变量命令分类 本篇主要解决以下问题: 什么是命令行参数命令行参数有什么用环境变量是什么环境变量存在的意义 命令行参数 在学习C语言中,对于main函数当初的写…

【数据结构】830+848真题易错题汇总(自用)

【数据结构】830848易错题汇总(10-23) 文章目录 【数据结构】830848易错题汇总(10-23)选择题填空题判断题简答题:应用题:算法填空题:算法设计题:(待补) 选择题 1、顺序栈 S 的 Pop(S, e)操作弹出元素 e,则下列(C )是正…

Android中使用Glide加载圆形图像或给图片设置指定圆角

一、Glide加载圆形头像 效果 R.mipmap.head_icon是默认圆形头像 ImageView mImage findViewById(R.id.image);RequestOptions options new RequestOptions().placeholder(R.mipmap.head_icon).circleCropTransform(); Glide.with(this).load("图像Uri").apply(o…

最新Tuxera NTFS2024破解版mac读写NTFS磁盘工具

Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下,MacOSX只能实现对NTFS的读取功能,Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2024完美兼容最新版本的MacOS 11 Big Sur,在M1芯片…

Oracle数据库 ORA-28001: the password has expired解决方法

今天在用dbvisualizer登录数据库的时候,报了the password has expired的错误,于是上网查了一下原因,是因为数据库密码过期了,因为默认的是180天。 解决方法: 1)用系统用户登录 #在cmd终端输入&#xff1…

基于晶体结构优化的BP神经网络(分类应用) - 附代码

基于晶体结构优化的BP神经网络(分类应用) - 附代码 文章目录 基于晶体结构优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.晶体结构优化BP神经网络3.1 BP神经网络参数设置3.2 晶体结构算法应用 4.测试结果…