luffy-10/redis/celery简单介绍

2023-05-16

这里写目录标题

  • 一.昨日回顾
  • 二.今日内容
    • 2.1redis之列表操作
    • 2.2 redis之其他操作
    • 2.3 redis之管道
    • 2.4 django中使用redis
      • 2.4.1通用方案
        • redis_pool.py
        • views.py
      • 2.4.2django提供的方案
        • 配置文件
        • views.py
    • 2.5.celery简介,架构
      • 2.5.1安装

一.昨日回顾

1 redis:内存数据库,key-value方式存储,5大数据类型,存取速度快,通常用来做缓存数据库
	-缓存数据库:放在mysql中的数据,在redis中存一份
	-计数(网站访问量,文章阅读量...)
	-分布式
	-游戏,歌曲,排行榜..
	-redis和memche比较:都是内存数据库,redis支持持久化,redis数据类型丰富
	-redis为什么这么快?  10w qbs (每秒查询率)--->6w作用
		-纯内存
		-io多路复用(epoll),非阻塞式io
		-单线程,避免了线程间切换(6.x以后,已经多线程了)
2 安装(开源软件,源代码开源,C语言写的),在不同平台编译--->可执行文件-->执行
	-官网下载都是源码包--->make,make install --->可执行文件
	-网上找专门的Windows安装包(官方不提供),一路下一步即可
	-是一个c/s架构的软件
	-启动服务端:redis-server.exe 配置文件路径(默认情况下做成了服务)
	-客户端连接:redis-cli -h 地址 -p 端口
    -图形化界面客户端:RedisDesktopManager
    -使用不同语言的客户端连接:python,go,java
3 python操作redis
	-pip3 install redis   
    
4 普通连接和连接池
	-连一次,操作完,关闭
    -最开始造出很多连接,每次从池中取一个连接使用
    
5 reids之字符串操作
	# set:超时时间,nx,xx
    # get
    # mset
    # mget
    # incr
    # decr
    # getrange
    # setrange
    # append
    
6 redis之hash操作
	hset
    hget
    hmset
    hmget
    hincrby
    hdel
    hexists
    hscan_iter/hgetall 区分
    

二.今日内容

2.1redis之列表操作

import redis

#
# class MyRedis():
#     def __enter__(self):
#         self.conn = redis.Redis()
#         return self.conn
#
#     def __exit__(self, exc_type, exc_val, exc_tb):
#         self.conn.close()
#
#
# with MyRedis() as conn:
# 列表操作
# 1 lpush(name,values)
# conn.lpush('l1',1,2,3,4,5,'lqz')

# 2 rpush
# conn.rpush('l1','egon')

# 3 lpushx(name,value)
# 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
# conn.lpushx('l2',9)
# conn.lpushx('l1',9)

# llen(name)
# res=conn.llen('l1')
# print(res)

# linsert(name, where, refvalue, value))  在某个位置插入值
# where :BEFORE或AFTER,大小写都行
# refvalue: lqz 表示以lqz为标准(不是下标索引)
# conn.linsert('l1','after','lqz','刘亦菲')
# conn.linsert('l1','before','lqz','baby')

# lset
# conn.lset('l1',0,'黄晓明')
# conn.lset('l1',5,'老伙计')

# lrem
# 第二个参数count:
# count = 0,删除列表中所有的指定值;
# count=2,从前到后,删除2个;
# count=-2,从后向前,删除2个
# conn.lrem('l1',0,'lqz')  # 把所有lqz都删除
# conn.lrem('l1',2,'lqz')  # 从前往后,删除2个lqz
# conn.lrem('l1',-1,'lqz')  # 从前往后,删除2个lqz

# lpop
# res=conn.lpop('l1')

# res=conn.rpop('l1')
# print(res)

# lindex(不删除)
# res=conn.lindex('l1',0)
# print(res)

# lrange   # 前闭后闭区间
# res = conn.lrange('l1', 0, 0)
# print(res)

# ltrim
# res=conn.ltrim('l1',3,5)
# print(res)


# rpoplpush  需要两个列表
# conn.lpush('l2','lqz','egon')
# conn.rpoplpush('l1','l1')


# blpop   # block:阻塞  左边弹出

# res=conn.blpop('l1')
# print(res)


'''
lpush
llen
linsert
lset
lrem
lpop
lrange  # 使用它,自定义增量迭代
blpop 
'''

### redis类库中没有提供对列表元素的增量迭代,借助lrange

import redis

conn = redis.Redis()
# res=conn.lrange('l2',0,9999)  # 全部取出来
# res=conn.lrange('l2',0,conn.llen('l2'))  # 从0取到列表长度


# 类似于字典的hgetall,一次性全取出来,存在的问题是,因为不知道列表有多大,很有可能撑爆内存
# 我们实现一个增量迭代
# print(res)

# for i in range(10000):
#     conn.lpush('l_test','test_%s'%i)


# res=conn.lrange('l2',0,conn.llen('l2'))
# print(res)
# res = conn.lrange('l_test', 0, 9)
# print(res)


# def lscan_iter(name, conn, count=10):
#     cursor = 0
#     lenght = conn.llen(name)  # 计算列表总长度
#     while cursor < lenght:
#         data = conn.lrange(name, cursor, (cursor+count) - 1)
#         cursor += count
#
#         for item in data:
#             yield item

def lscan_iter(name, conn, count=10):
    cursor = 0
    while True:
        data = conn.lrange(name, cursor, (cursor+count) - 1)
        if data:
            cursor += count
            for item in data:
                yield item
        else:
            break

for i in lscan_iter('l_test',conn,20):
    print(i)

2.2 redis之其他操作

import redis


## 公共操作

# 搭建哨兵。用了集群,这个模块就不够用了
# conn=redis.Redis()

# delete
# res=conn.delete('l2','name')


#exists
# res=conn.exists('l1','l_test','l2')
# res=conn.exists('l_test')

# expire
# res=conn.expire('l_test',5)

# rename
# conn.lpush('l1',1,2,3)
# res=conn.rename('l1','l2')

#
# res=conn.move('l2',3)

## redis的库是隔离的
conn = redis.Redis()
# res=conn.lpop('l2')


# 随机出一个key值
# res=conn.randomkey()


# conn.sadd('choujiang',9)
# conn.sadd('choujiang',90)
# conn.sadd('choujiang',99)
# print(res)
# res=conn.spop('choujiang')
# print(res)




# type----查看类型



# res=conn.type('choujiang')
# res=conn.type('ss')
res=conn.type('zzz')
print(res)
conn.close()

2.3 redis之管道

### redis是数据库,非关系型数据库,不支持事务
## redis提供了管道,通过管道,实现事务
import redis

conn=redis.Redis()
# 开启一个管道
pi=conn.pipeline(transaction=True)
pi.multi()
# 只要人的年龄加了1,工资加1w
pi.incr('age')
raise Exception('出异常了')

pi.incr('salary',10000)
# 向管道中发送了两个命令,并没有真正的执行
pi.execute()  #表示一次性执行管道中的命令


## 原来操作
# conn.incr('age')
# raise Exception('出错误了')
# conn.incr('salary',1000)

conn.close()

2.4 django中使用redis

2.4.1通用方案

redis_pool.py

import redis

POOL=redis.ConnectionPool(host='127.0.0.1',port=6379,max_connections=100)

views.py

from utils.redis_pool import POOL
import redis
def test_redis(request):
    conn=redis.Redis(connection_pool=POOL)
    age=str(conn.get('age'),encoding='utf-8')

    return HttpResponse('人的年龄,从redis中取出来了是:%s'%age)

2.4.2django提供的方案

pip3 install django-redis

配置文件

# redis的配置
#以后django的缓存,用的就是redis,很方便使用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",
        }
    }
}

views.py

from django_redis import get_redis_connection
def test_django_redis(request):
    # 从连接池中拿到连接
    conn=get_redis_connection()

    age = str(conn.get('age'), encoding='utf-8')

    from django.core.cache import cache
    cache.set('name','lqz',4)  # 往缓存中放key和value,其实放到了redis中了


    cache.set('xxx',test_redis)
    return HttpResponse('人的年龄是:%s' % age)

2.5.celery简介,架构

1 celery:芹菜(跟芹菜没有任何关系)
2 python中的一个分布式异步任务框架
	-执行异步任务---(对立:同步任务):解决耗时任务,将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等
    -执行延时任务(5分钟后干一件事):解决延迟任务
    -执行定时任务:每天,隔几分钟,干什么事:解决周期(周期)任务,比如每天数据统计
3 解释
Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.

4 celery特点(了解)
    1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)
    2)celery服务为为其他项目服务提供异步解决任务需求的

5 Celery架构
	Celery的架构由三部分组成,消息中间件(message broker)、任务执行单元(worker)和 任务执行结果存储(task result store)组成
    
    #消息中间件
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等

	# 任务执行单元
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

	# 任务结果存储
Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等

在这里插入图片描述

2.5.1安装

pip install celery

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

luffy-10/redis/celery简单介绍 的相关文章

  • 使用java的modbus4j的Rtu方式获取监测数据

    最近要从modbus总线上获取数据 xff0c 还要用java开发 xff0c 找了半天 xff0c 感觉modbus4j在github上评价比较高 xff0c 尝试了一下 xff0c 果然很好用 xff0c 比之前的方法方便很多 在使用过
  • JAVA使用RXTXcomm包操作串口数据流

    最近对接下位机 xff0c 对方没有使用modbus总线协议来对接 xff0c 直接使用的操作流对接 xff0c 找了一下java中使用RXTXcomm jar比较方便 xff0c 下面是包的使用方法 1 maven工程中引入依赖 可能这个
  • 搭建分布式存储服务minio详细过程

    最近项目的存储量比较大 xff0c 考虑项目后期存储需要拓展 xff0c 决定使用分布式存储 xff0c 综合考察后 xff0c 最终选定使用minio作为存储服务 以下是使用步骤 xff0c MARK一下 xff01 1 服务器 span
  • STM32单片机的学习方法(方法大体适用所有开发版入门)

    1 xff0c 一款实用的开发板 这个是实验的基础 xff0c 有时候软件仿真通过了 xff0c 在板上并不一定能跑起来 xff0c 而且有个开发板在手 xff0c 什么东西都可以直观的看到 xff0c 效果不是仿真能比的 但开发板不宜多
  • HTTP协议各字段信息

    HTTP协议 xff1a 超文本传输协议 xff0c 为一个应用层协议 xff1b 协议只是传输的一种约定 xff0c 我们也可以自定义一种协议 xff0c 只不过说有些大佬已经写好 xff0c 我们用就可以了 HTTP协议的内容 xff1
  • k8s和docker区别

    k8s和docker区别有以下几点 xff1a 1 k8s是一种开放源码的容器集群管理系统 xff0c 能够实现自动化部署 扩展容器集群 维护等功能 2 Docker是一种开放源码的应用容器引擎 xff0c 开发者可以将他们的应用和依赖打包
  • VMware虚拟机中不能解析域名

    VMware虚拟机中能够正常访问局域网IP xff0c 输入域名不能上网 xff0c 但是ping一下外网ip是可以通的 xff0c 不能解析域名 xff0c 解决方法 xff1a span class token number 1 spa
  • 在Ubuntu安装软件时,显示“E:无法定位软件包

    今天在安装can utils时 xff0c 使用了命令sudo apt install can utils xff0c 提示 E 无法定位软件包 34 xff0c 也不明白为啥报这个错 xff0c 命名我的是linux系统呀 xff0c 哪
  • linux下can调试工具libsocketcan、canutils安装与使用

    1 本次使用的组件版本 libsocketcan 0 0 11 tar bz2 下载地址 xff1a https public pengutronix de software libsocketcan libsocketcan 0 0 11
  • vue中methods、mounted等使用方法整理

    created html加载完成之前 xff0c 执行 执行顺序 父组件 子组件 mounted html加载完成后执行 执行顺序 子组件 父组件 methods 事件方法执行 watch 去监听一个值的变化 xff0c 然后执行相对应的函
  • 使用STM32G4 ----串口发送数据USART_TX的使用

    一 引脚的配置 串口对应的引脚 PA10 span class token operator span span class token operator span span class token operator span span c
  • 【MFC】CListCtrl控件的GetItem用法

    GetItem 方法 说明 检索列表视图项的部分属性或全部属性 BOOL GetItem LVITEM pItem const 参数 pItem 指向 LVITEM 结构的指针 xff0c 该结构接收项的属性 返回值 如果成功 xff0c
  • NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

    NVIDIA Jetson Xavier NX部署VINS fusion GPU 一 环境配置 xff08 Ubuntu 18 04 xff09 1 Cuda 10 2的安装 span class token function sudo s
  • OPi5 香橙派5 安卓12 隐藏大屏模式下任务栏

    记录一下 原版安卓系统在检测到副屏 xff0c 会进入大屏模式 xff0c 屏幕底下有个难看又占地方的任务栏 以下是隐藏的方法 xff0c 在所有界面都会隐藏 xff0c 包括三个虚拟按键 不过 xff0c 用其他APP仍然可以调用包括最近
  • 无人机飞行控制基础

    坐标系统 描述无人机的运动依赖于无人机的位置以及它的方向 常见的主要有两种坐标系统 xff1a 无人机坐标系和大地坐标系 无人机坐标系 无人机坐标系是相对于无人机自身的坐标系统 如下图 坐标原点位于无人机质心 xff0c 三个坐标轴互相垂直
  • socketcan_bridge 包 设置多路CAN口 小记

    参考链接 xff1a socketcan bridge ROS Wiki 基于ROS 43 CANopen的SocketCAN驱动在Ubuntu下的应用说明 SzZhangfq的博客 CSDN博客 ros socketcan socketc
  • 你知道几个中文编程语言,快来瞧瞧这些有趣的中文编程语言。

    提到编程语言 xff0c 我们所了解的也是比较广为人知的一些主流编程语言 xff0c 如Java C C 43 43 Python PHP等 那除了这些编程语言 xff0c 你有了解过中文编程语言吗 xff1f 如果没有 xff0c 那今天
  • Win10连接无线“需要执行操作”或无网络问题的解决方法。

    转载自品略图书馆 http www pinlue com article 2020 03 2800 3510060445349 html 最近这几天有用户反馈Win10系统连接网络出现异常的问题 xff0c 表现为连接到无线网络WIFI之后
  • Excel怎么比较两列文本是否相同?

    转载自品略图书馆 http www pinlue com article 2020 05 2215 1410586873210 html 这个问题很简单 xff0c 属于Excel基础操作技巧 xff0c 我就分享我最喜欢用的三招给你 xf
  • 为什么电脑唯独搜不到自己家wifi?

    转载自品略图书馆 http www pinlue com article 2020 05 2213 2410586244619 html 电脑唯独搜不到自己家wifi xff0c 别人家的都能搜到 xff0c 手机也可以搜到自己家的 xff

随机推荐

  • http://和www.前缀网站有什么具体区别?

    转载自品略图书馆 http www pinlue com article 2019 03 1813 598231572617 html 将http 和www 放一起比较 xff0c 是没有实际意义的 一 http协议二 域名一 http协议
  • 什么是三层交换机、网关、DNS、子网掩码、MAC地址?

    转载自品略图书馆 http www pinlue com article 2020 08 2313 2511146576256 html 一文讲懂什么是三层交换机 网关 DNS 子网掩码 MAC地址 很多朋友多次问到什么是网关 dns 子网
  • C++类对象共享数据的5种实现方法

    转自 xff1a http www pinlue com article 2020 09 2617 0611262487540 html
  • c语言free的用法

    转自 xff1a http www pinlue com article 2020 03 3100 4610073901713 html
  • Spring Boot 修改默认端口号

    修改配置文件 xff0c 加上参数 xff1a server port 61 8014 或者 xff1a server port 8014 启动后可发现tomcat运行在端口8014上了 实现原因可看以下链接 转载 SpringBoot修改
  • php调用类中的方法

    转自 xff1a http www pinlue com article 2020 06 1219 0410725563037 html
  • 人工智能 : 第三篇”脑机接口“

    本文作者Tim Urban xff1a Wait but Why的作者Tim Urban 是埃隆马斯克 xff08 特斯拉 SpaceX创始人 xff09 强烈推荐的科技博主 他写的AI文章是全世界转发量最高的 他的粉丝还包括 xff1a
  • 如何找回一台丢失的Win10电脑?

    今天说说如何找电脑 为什么小微想到了这个问题 还要从一次关于奇葩办公地点的讨论说起 看到大家的回答 xff0c 小微佩服得五体投地 办公经历还可以如此精jing彩xin绝dong伦po 作为结实靠谱的出行伙伴 ThinkPad陪伴大家出现在
  • 不必再狂按空格键了!Word 里文字对齐推荐这4种方法

    我们在用Word写论文 制作简历的时候 xff0c 通常会遇到把word中某些特定文字对齐的情况 那么问题来了 xff0c 你平时都是怎么对齐文字的 xff1f 傻傻的用空格来对齐吗 xff1f 在字符数不等的情况下 xff0c 加空格不仅
  • AMI主板BIOS菜单图文讲解设置!

    电脑硬件 xff0c 包括电脑中所有物理的零件 xff0c 以此来区分它所包括或执行的数据和为硬件提供指令以完成任务的软件 主要包含 机箱 xff0c 主板 xff0c 总线 xff0c 电源 xff0c 硬盘 xff0c 存储控制器 xf
  • luffy-02

    这里写目录标题 一 昨日回顾二 今日内容1 路飞前台配置 1 重构项目目录 2 文件修订 xff1a 目录中非配置文件的多余文件可以移除router的使用 3 前台配置 全局样式 配置文件 axios vue cookies element
  • luffy-03

    这里写目录标题 一 昨日回顾二 今日内容1 跨域问题1 1后端自己处理跨域简单请求非简单请求中间件处理 1 2前端处理跨域App vuevue config js 2 头部组件 尾部组件components Header vuecompon
  • luffy-04

    这里写目录标题 一 昨日回顾二 今日内容1 路飞项目使用xadmin2 首页轮播图接口 轮播图表 视图类 轮播图数量4 通过配置实现 前端对接 后续 接口缓存 3 git的使用3 1git的工作流程 4 git分支git提交代码出现冲突的2
  • luffy-05

    这里写目录标题 一 首页轮播图接口二 今日内容1 过滤文件2 从远端拉项目3 远程仓库3 1链接远程仓库的两种情况 4 冲突出现的原因及解决 一 首页轮播图接口 span class token number 1 span 首页轮播图接口
  • 手把手教你搭建鸿蒙hi3518开发和运行环境

    前言 学习 C 语言 xff0c C 43 43 语言 xff0c 数据结构和算法 xff0c 操作系统 xff0c 网络 xff0c 驱动 xff0c 设计模式等知识 用鸿蒙来强化就太对了 本文教你一步一步搭建鸿蒙的开发和运行环境 xff
  • luffy-06

    这里写目录标题 一 上节回顾二 今日内容1 ssh链接和https链接2 gitlab3 git远程分支合并4 git冲突出现原因及解决5 首页登录注册vue页面Header vueLogin vue 6 登录注册功能接口分析 一 上节回顾
  • luffy-07

    这里写目录标题 一 昨日回顾二 今日内容1 登录注册前端页面1 1Login vue1 2Register vue1 3Header vue 2 多方式登录接口3 手机号是否存在接口3 1路由层user urls py3 2user ser
  • luffy-08

    这里写目录标题 一 集成了腾讯短信 封装 luffyapi lib t sms settings pyluffyapi lib t sms sms py 二 短信验证码接口2 1路由 配置2 2视图 三 短信登录接口3 1视图3 2序列化类
  • luffy-09/redis

    这里写目录标题 一 昨日回顾二 今日内容1 redis介绍2 redis的Windows安装和配置3 普通链接和连接池3 1代码3 2redis pool py 4 redis之string操作5 redis之hash操作 一 昨日回顾 s
  • luffy-10/redis/celery简单介绍

    这里写目录标题 一 昨日回顾二 今日内容2 1redis之列表操作2 2 redis之其他操作2 3 redis之管道2 4 django中使用redis2 4 1通用方案redis pool pyviews py 2 4 2django提