基于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 相关文章推荐
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
django+js+ajax实现刷新页面的方法
May 22 Python
Django模板变量如何传递给外部js调用的方法小结
Jul 24 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
Python reversed函数及使用方法解析
Mar 17 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
Win 10下Anaconda虚拟环境的教程
May 18 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
10个python爬虫入门实例(小结)
Nov 01 Python
python blinker 信号库
May 04 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内存缓存功能memcached示例
2016/10/19 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
关于文本限制字数的js代码
2007/04/02 Javascript
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
详解JS数值Number类型
2018/02/07 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
python中xrange和range的区别
2014/05/13 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python访问MySQL封装的常用类实例
2014/11/11 Python
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
黄河的主人教学反思
2014/02/07 职场文书
设备售后服务承诺书
2014/05/30 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
法人代表证明书范本
2015/06/18 职场文书