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.rhkb.cn/news/166138.html

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

相关文章

wireshark数据包内容查找功能详解

wireshark提供通过数据包特征值查找具体数据包的功能,具体查找功能如下, (1)选择查找目标区域(也就是在哪里去匹配特征值) 如下图,【分组列表】区域查找指的是在最上方的数据包列表区域查找&…

QT中窗口自绘制效果展示

项目中需要使用QT进行窗口自绘,前期先做一下技术探索,参考相关资料代码熟悉流程。本着代码是最好的老师原则,在此记录一下。 目录 1.运行效果 2.代码结构 3.具体代码 1.运行效果 2.代码结构 3.具体代码 myspeed.pro QT core gui…

vue视频直接播放rtsp流;vue视频延迟问题解决;webRTC占cpu太大卡死问题解决;解决webRTC播放卡花屏问题:

播放多个视频 <div class"video-box"><div class"video"><iframe style"width:100%;height:100%;" name"ddddd" id"iframes" scrolling"auto" :src"videoLeftUrl"></iframe>&l…

缓存失效方案

一、背景 WRITE &#xff1a; 数据写入Mysql 和 Redis缓存&#xff0c; READ&#xff1a;先从 Redis 缓存中取数据&#xff0c;拿不到再从Mysql中加载&#xff0c;更新到Redis 上图第三阶段&#xff0c;接收Mysql的binlog变更消息&#xff0c;可以参考阿里的 Canal&#xff0…

Ubuntu系统上传文件的多种方法-断网上传-安装包上传-物联网开发维护

一、背景 在全新的Ubuntu系统中&#xff0c;其实是无法执行ifconfig命令的&#xff0c;因为这需要net-tools才能执行。在某些无法连接到外网的情况下&#xff0c;我们常常通过将安装包上传或发送到Ubuntu系统中&#xff0c;解压并安装&#xff0c;以保证相关指令能够执行。 本文…

Python获取微信公众号文章数据

这是一个通过 Python mitmproxy 库 实现获取某个微信公众号下全部文章数据的解决方案。首先需要创建一个 Python 虚拟环境&#xff0c;并进入虚拟环境下&#xff1a; $ python -m venv venv $ venv/Scripts/activate我们需要使用 mitmproxy 库 来建立一个网络代理&#xff0c;…

LeetCode_并查集_DFS_中等_2316.统计无向图中无法互相到达点对数

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条无向边。请…

将语义分割的标注mask转为目标检测的bbox

1. 语义分割标签 1.1 labelme工具 语义分割的标签是利用labelme工具进行标注的,标注的样式如下: 1.2 语义分割的标签样式 2. 转换语义分割的标注到目标检测的bbox 实现步骤 (1) 利用标注的json文件生成mask图片(2) 在mask图片中找到目标的bbox矩形框的左上角点和右下角点(…

Redis 之 SessionCallback RedisCallback 使用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

备忘录模式-撤销功能的实现

在idea写代码的过程中&#xff0c;会经常用到一个快捷键——“crtl z”,即撤销功能。“备忘录模式”则为撤销功能提供了一个设计方案。 1 备忘录模式 备忘录模式提供一种状态恢复机制。在不破坏封装的前提下&#xff0c;捕获对象内部状态并在该对象之外保存这个状态。可以在…

Web自动化测试:测试用例断言!

运行测试用例时&#xff0c;需要判断用例是否执行成功&#xff0c;此时需要有一个我们期望的结果来进行验证。这里unittest中&#xff0c;如果一个case执行的过程中报错&#xff0c;或者我们判断结果不符合期望&#xff0c;就会判定此条用例执行失败&#xff0c;判断的条件主要…

【MySQL】数据库——表操作

文章目录 1. 创建表2. 查看表3. 修改表修改表名add ——增加modify——修改drop——删除修改列名称 4. 删除表 1. 创建表 语法&#xff1a; create table 表名字 ( 列名称 列类型 ) charset set 字符集 collate 校验规则 engine 存储引擎 ; charset set字符集 &#xff0c;若…

【C++代码】二叉搜索树的最近公共祖先,二叉搜索树中的插入操作,删除二叉搜索树中的节点--代码随想录

题目&#xff1a;二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&a…

小程序中如何使用自定义组件应用及搭建个人中心布局

一&#xff0c;自定义组件 从小程序基础库版本 1.6.3 开始&#xff0c;小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。 开发者可以将页面内的功能模块抽象成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的…

MSQL系列(四) Mysql实战-索引分析Explain命令详解

Mysql实战-索引分析Explain命令详解 前面我们讲解了索引的存储结构&#xff0c;我们知道了BTree的索引结构&#xff0c;也了解了索引最左侧匹配原则&#xff0c;到底最左侧匹配原则在我们的项目中有什么用&#xff1f;或者说有什么影响&#xff1f;今天我们来实战操作一下&…

Java并发面试题:(七)ThreadLocal原理和内存泄漏

ThreadLocal是什么&#xff1f; ThreadLocal是线程本地存储机制&#xff0c;可以将数据缓存在线程内部。ThreadLocal存储的变量在线程内共享的&#xff0c;在线程间又是隔离的。 ThreadLocal实现原理&#xff1f; ThreadLocal的底层是ThreadLocalMap&#xff0c;每个Thread都…

YOLOv5算法改进(16)— 增加小目标检测层 | 四头检测机制(包括代码+添加步骤+网络结构图)

前言:Hello大家好,我是小哥谈。小目标检测层是指在目标检测任务中用于检测小尺寸目标的特定网络层。由于小目标具有较小的尺寸和低分辨率,它们往往更加难以检测和定位。YOLOv5算法的检测速度与精度较为平衡,但是对于小目标的检测效果不佳,根据一些论文,我们可以通过增加检…

Kafka Tool(Kafka 可视化工具)安装及使用教程

Kafka Tool&#xff08;Kafka 可视化工具&#xff09;安装及使用教程 Kafka Tool 工具下载 下载地址 http://www.kafkatool.com/download.html 下载界面 不同版本的Kafka对应不同版本的工具&#xff0c;个人使用的是2.11&#xff0c;所以下载的是最新的2.0.8版本&#xff…

android 13/14高版本SurfaceFlinger出现VSYNC-app/VSYNC-appSf/VSYNC-sf剖析

问题背景&#xff1a; 了解surfaceflinger的vsync同学都可能知道vsync属于一个节拍器&#xff0c;主要用来控制有节奏的渲染&#xff0c;不至于会产生什么画面撕裂等现象。 一般vsync都有会有2部分&#xff1a; app部分vsync&#xff0c;控制各个app可以有节奏的上帧 surfacef…

PyQt学习笔记-获取Hash值的小工具

目录 一、概述1.1 版本信息&#xff1a;1.2 基本信息&#xff1a;1.2.1 软件支持的内容&#xff1a;1.2.2 支持的编码格式 1.3 软件界面图 二、代码实现2.1 View2.2 Controller2.3 Model 三、测试示例 一、概述 本工具居于hashlibPyQtQFileDialog写的小工具&#xff0c;主要是…