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

作者:295631788 时间:2021-08-06 22:31:29 

操作 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)

来源:https://blog.51cto.com/hequan/2466602

标签:python,redis,消息,队列
0
投稿

猜你喜欢

  • Python 利用argparse模块实现脚本命令行参数解析

    2022-12-01 16:11:55
  • socket + select 完成伪并发操作的实例

    2022-05-09 14:23:32
  • 基于Python实现开心消消乐小游戏的示例代码

    2022-03-20 13:19:10
  • 详解Python3中yield生成器的用法

    2021-09-03 05:59:27
  • Pandas中DataFrame交换列顺序的方法实现

    2023-01-21 10:21:08
  • PDO::setAttribute讲解

    2023-06-05 18:04:23
  • python 读写、创建 文件的方法(必看)

    2023-08-07 11:37:40
  • 详解python中的三种命令行模块(sys.argv,argparse,click)

    2021-04-24 12:57:10
  • asp金额大小写转换完全无错版

    2007-09-26 09:38:00
  • python pyqtgraph 保存图片到本地的实例

    2023-05-08 01:15:11
  • 20行python代码的入门级小游戏的详解

    2023-07-15 01:25:31
  • 发一个自己用的JS框架(试用版^_^)

    2011-09-11 18:53:24
  • 基于python框架Scrapy爬取自己的博客内容过程详解

    2021-12-21 06:39:30
  • Python Pandas读取Excel日期数据的异常处理方法

    2021-12-10 11:22:55
  • 关于生成目录树结构的类

    2007-09-13 12:19:00
  • python开发中range()函数用法实例分析

    2021-05-08 12:53:26
  • python中几个常用函数的正确用法-lambda/filter/map/reduce

    2022-02-17 14:52:45
  • Windows 下更改 jupyterlab 默认启动位置的教程详解

    2023-06-11 13:10:12
  • 解密CSS Sprites:技巧、工具和教程

    2011-01-11 19:38:00
  • python3 pygame实现接小球游戏

    2023-07-28 18:04:21
  • asp之家 网络编程 m.aspxhome.com