基于python实现操作redis及消息队列


Posted in Python onAugust 27, 2020

操作 redis

import redis
redisPool = redis.ConnectionPool(host='192.168.100.50', port=6379, db=8)
redis= redis.Redis(connection_pool=redisPool)

redis.set('key','values')
redis.get('com')
redis.append('keys','values')
redis.delete('keys')

print(redis.getset('name','Mike')) #赋值name为Mike并返回上一次的value
print(redis.mget(['name','age']))  #输出name键和age键的value
print(redis.setnx('newname','james')) #如果键值不存在,则赋值
print(redis.mset({'name1':'smith','name2':'curry'})) #批量赋值
print(redis.msetnx({'name3':'ltf','name4':'lsq'}))  #不存在才批量赋值
print(redis.incr('age',1))  #age对应的value 加1
print(redis.decr('age',5))  #age对应的value 减5
print(redis.append('name4','is a sb'))  #在name4的value后追加 is a sb 返回字符串长度
print(redis.substr('name',1,4))  #截取键 name

print(redis.sadd('tags','Book','Tea','Coffee')) #返回集合长度 3
print(redis.srem('tags','Book')) #返回删除的数据个数
print(redis.spop('tags'))  #随机删除并返回该元素
print(redis.smove('tags','tags1','Coffee'))
print(redis.scard('tags')) # 获取tags集合的元素个数
print(redis.sismember('tags', 'Book')) # 判断Book是否在tags的集合中
print(redis.sinter('tags', 'tags1')) # 返回集合tags和集合tags1的交集
print(redis.sunion('tags', 'tags1')) # 返回集合tags和集合tags1的并集
print(redis.sdiff('tags', 'tags1')) # 返回集合tags和集合tags1的差集
print(redis.smembers('tags')) # 返回集合tags的所有元素

print(redis.hset('price','cake',5)) # 向键名为price的散列表添加映射关系,返回1 即添加的映射个数
print(redis.hsetnx('price','book',6)) # 向键名为price的散列表添加映射关系,返回1 即添加的映射个数
print(redis.hget('price', 'cake')) # 获取键名为cake的值 返回5
print(redis.hmset('price',{'banana':2,'apple':3,'pear':6,'orange':7}))  #批量添加映射
print(redis.hmget('price', ['apple', 'orange'])) # 查询apple和orange的值 输出 b'3',b'7'
print(redis.hincrby('price','apple',3))  #apple映射加3 为6
print(redis.hexists('price', 'banana')) # 在price中banana是否存在 返回True
print(redis.hdel('price','banana'))  #从price中删除banana 返回1
print(redis.hlen('price')) # 输出price的长度
print(redis.hkeys('price')) # 输出所有的映射键名
print(redis.hvals('price')) # 输出所有的映射键值
print(redis.hgetall('price')) # 输出所有的映射键对

print(redis.rpush('list',1,2,3)) #向键名为list的列表尾部添加1,2,3 返回长度
print(redis.lpush('list',0))  #向键名为list的列表头部添加0 返回长度
print(redis.llen('list'))  #返回列表的长度
print(redis.lrange('list',1,3)) #返回起始索引为1 终止索引为3的索引范围对应的列表
print(redis.lindex('list',1))  #返回索引为1的元素-value
print(redis.lset('list',1,5)) #将list的列表索引为1的重新赋值为5
print(redis.lpop('list')) #删除list第一个元素
print(redis.rpop('list'))  #删除list最后一个元素
print(redis.blpop('list'))  #删除list第一个元素
print(redis.brpop('list'))  #删除最后一个元素
print(redis.rpoplpush('list','list1'))  #删除list的尾元素并将其添加到list1的头部

消息队列使用例子

import redis
import json
redisPool = redis.ConnectionPool(host='192.168.100.50', port=6379, db=8)
client = redis.Redis(connection_pool=redisPool)

# 顺序插入五条数据到redis队列,sort参数是用来验证弹出的顺序
while True:
  num = 0
  for i in range(0, 100):
    num = num + 1
    # params info
    params_dict = {"name": f"test {num}", "sort":num}

    client.rpush("test", json.dumps(params_dict))

  # 查看目标队列数据
  result = client.lrange("test", 0, 100)
  print(result)
  import time
  time.sleep(10)
import redis
import time
import multiprocessing
import time
import os
import random

redisPool = redis.ConnectionPool(host='192.168.100.50', port=6379, db=8)
client = redis.Redis(connection_pool=redisPool)

def test1(msg):
  t_start = time.time()
  print("%s开始执行,进程号为%d" % (msg, os.getpid()))
  time.sleep(random.random() * 2)
  t_stop = time.time()
  print("%s执行完成,耗时%.2f" % (msg, t_stop - t_start))

while True:
  number = client.llen('test')
  print("现在的队列任务 条数是 ", number)
  p = 100
  if number > p-1:
    print("-----start-----")
    a = []
    for i in range(p):
      result = client.lpop("test")
      a.append(result)
    print("每10条读取一次", a)
    po = multiprocessing.Pool(p)
    for i in range(0, p):
      # Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
      # 每次循环将会用空闲出来的子进程去调用目标
      po.apply_async(test1, (a[i],))
    po.close() # 关闭进程池,关闭后po不再接收新的请求
    po.join() # 等待po中所有子进程执行完成,必须放在close语句之后
    print("-----end-----")
    time.sleep(2)
  elif number < p and number > 0:
    print("-----start-----")
    a = []
    for i in range(number):
      a = []
      result = client.lpop("test")
      a.append(result)
    print("小于10条的 读取一次 ", a)
    po = multiprocessing.Pool(number)
    for i in a:
      # Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
      # 每次循环将会用空闲出来的子进程去调用目标
      po.apply_async(test1, (a,))

    po.close() # 关闭进程池,关闭后po不再接收新的请求
    po.join() # 等待po中所有子进程执行完成,必须放在close语句之后
    print("-----end-----")
    time.sleep(2)
  elif number == 0:
    print("没有任务需要处理")
    time.sleep(2)
  else:
    time.sleep(2)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现目录树生成示例
Mar 28 Python
Python信息抽取之乱码解决办法
Jun 29 Python
Python快速排序算法实例分析
Nov 29 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
django的csrf实现过程详解
Jul 26 Python
python实现的读取网页并分词功能示例
Oct 29 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
教你使用pyinstaller打包Python教程
May 27 Python
Python3如何在服务器打印资产信息
Aug 27 #Python
python 8种必备的gui库
Aug 27 #Python
Django静态文件加载失败解决方案
Aug 26 #Python
Python趣味入门教程之循环语句while
Aug 26 #Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 #Python
如何把python项目部署到linux服务器
Aug 26 #Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 #Python
You might like
php模块memcache和memcached区别分析
2011/06/14 PHP
php实现简单洗牌算法
2013/06/18 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
用ADODB.Stream转换
2007/01/22 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
Python中with及contextlib的用法详解
2017/06/08 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
利用python绘制正态分布曲线
2021/01/04 Python
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
交通法规咨询中心工作职责
2013/11/27 职场文书
党员党性分析材料
2014/02/17 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
财务人员个人工作总结
2015/02/27 职场文书
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android