基于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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
python中re模块知识点总结
Jan 17 Python
python快速安装OpenCV的步骤记录
Feb 22 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项目的方法
2006/10/09 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
jQuery的三种$()
2009/12/30 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python对象转换为json的方法步骤
2019/04/25 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
C语言笔试题
2014/09/04 面试题
关于.NET, HTML的五个问题
2012/08/29 面试题
linux面试题参考答案(4)
2013/01/28 面试题
鲜果饮品店创业计划书
2014/01/21 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
法定代表人身份证明书
2015/06/18 职场文书
客户答谢会致辞
2015/07/30 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
GPU服务器的多用户配置方法
2022/07/07 Servers