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

这篇具有很好参考价值的文章主要介绍了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 redis

conn=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 redis

conn = 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 redis

POOL = 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 cache
      cache.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:
    pass


def 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

redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用),redis,缓存,redis,django,pipe,管道文章来源地址https://www.toymoban.com/news/detail-722730.html

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('任务已经开始被执行')

到了这里,关于redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux部署Redis哨兵集群 一主两从三哨兵(这里使用Redis6,其它版本类似)

          Redis-Sentinel是redis官方推荐的高可用性解决方案,sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能,而redis-sentinel就是一个独立运行的进程

    2024年02月04日
    浏览(50)
  • SpringBoot使用Redis作为缓存器缓存数据的操作步骤以及避坑方案

    2.1使用之前要明确使用的业务场景 例如我们在登录时,可以让redis缓存验证码,又如在分类下显示菜品数据时,我们可以对分类和菜品进行缓存数据等等。 2.2导入Redis相关依赖 2.3在使用的controller层导入RedisTemplate 例如: 说明一下:这里为什么使用@Resource注解而不使用@Autowi

    2024年02月16日
    浏览(51)
  • Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

    目录 一、依赖包情况 二、项目目录结构    2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本配置 4.2、user的models 4.3、user的视图函数 五、

    2024年02月13日
    浏览(46)
  • Linux通信--构建进程通信的 方案之管道(下)|使用匿名管道实现功能解耦|命名管道实现serve&client通信

    文章目录 一、管道的应用实例-父进程唤醒子进程,子进程执行某种任务 二、命名管道 1.创建一个命名管道 2.匿名管道与命名管道的区别 3.命名管道的打开规则 4.用命名管道实现serverclient通信 后续将源码上传到gitee,上传后修改链接。 管道应用的一个限制就是只能具有共同祖

    2024年02月10日
    浏览(44)
  • 使用elasticsearch 8.4.3 的管道解析日志(kibana操作)

    前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 以下是一个简单的文档解析案例,更多的操作解析可以看 : 官方文档 管道可让您在插入数据之前 对数据执行常见转换。例如,您可以使用管道删除字段、从

    2024年02月22日
    浏览(43)
  • SpringBoot中操作Redis通过所有可能的key查询存在的key并解析为对象实体的通用方法

    SpringBoot中操作Redis的特殊操作-批量查询(通过key的集合批量查杜绝模糊搜索)、查询并解析对象list: SpringBoot中操作Redis的特殊操作-批量查询(通过key的集合批量查杜绝模糊搜索)、查询并解析对象list_霸道流氓气质的博客-CSDN博客 在上面讲操作redis中特殊操作时,对于通过key的集

    2023年04月09日
    浏览(43)
  • QT 使用第三方库QtXlsx操作Excel表

    一直以来,都想学习一下C/C++如何操作excel表,在网上调研了一下,觉得使用C/C++去操作很麻烦,遂转向QT这边;QT有一个自带的类 QAxObject ,可以使用他去操作,但随着了解的深入,觉得他并不是很好,有很多其他缺陷(例如必须电脑安装了办公软件才可以进行操作等),所以继

    2024年02月15日
    浏览(48)
  • django后台管理中导出Excel表格与其它表格数据等功能

    需求,在django admin后台中添加导出excel表格功能 需求人群:财务,董事 该插件允许导出文件的格式为:xls,xlsx,csv,tsv,ods,json,yaml,html 执行该命令将会安装以下插件 ![[Pasted image 20240119043040.png]] ![[Pasted image 20240119043224.png]] 3在订单models.py相同路径中创建resources.py文件 ![[Pasted image 2

    2024年01月25日
    浏览(53)
  • django中使用redis和django缓存

    # 两种方式          -方式一:自定义的通用方案(跟框架无关) -写一个py文件:redis_pool.py                                   #连接池             import redis             POOL=redis.ConnectionPool(max_connections=10)       生成POOL。做成单例         -在用的位置,导入直

    2024年02月11日
    浏览(46)
  • Python实现自动化办公(使用第三方库操作Excel)

    相关知识: 获取所有工作表的数目 获取所有工作表的名称 获取一张表中单元格的行数 获取一张表中单元格的列数   批量读取数据:【代码】 注意openpyxl 和前面的xlrd不一样,openpyxl读取的行列是从1开始的,这就对应了Excel表格中的行列的位置 读取所有行中的所有单元格,并

    2024年01月19日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包