基于python實(shí)現(xiàn)操作redis及消息隊(duì)列
操作 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對應(yīng)的value 加1 print(redis.decr('age',5)) #age對應(yīng)的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')) #返回刪除的數(shù)據(jù)個(gè)數(shù) print(redis.spop('tags')) #隨機(jī)刪除并返回該元素 print(redis.smove('tags','tags1','Coffee')) print(redis.scard('tags')) # 獲取tags集合的元素個(gè)數(shù) 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的散列表添加映射關(guān)系,返回1 即添加的映射個(gè)數(shù) print(redis.hsetnx('price','book',6)) # 向鍵名為price的散列表添加映射關(guān)系,返回1 即添加的映射個(gè)數(shù) 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的索引范圍對應(yīng)的列表 print(redis.lindex('list',1)) #返回索引為1的元素-value print(redis.lset('list',1,5)) #將list的列表索引為1的重新賦值為5 print(redis.lpop('list')) #刪除list第一個(gè)元素 print(redis.rpop('list')) #刪除list最后一個(gè)元素 print(redis.blpop('list')) #刪除list第一個(gè)元素 print(redis.brpop('list')) #刪除最后一個(gè)元素 print(redis.rpoplpush('list','list1')) #刪除list的尾元素并將其添加到list1的頭部
消息隊(duì)列使用例子
import redis import json redisPool = redis.ConnectionPool(host='192.168.100.50', port=6379, db=8) client = redis.Redis(connection_pool=redisPool) # 順序插入五條數(shù)據(jù)到redis隊(duì)列,sort參數(shù)是用來驗(yàn)證彈出的順序 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)) # 查看目標(biāo)隊(duì)列數(shù)據(jù) 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開始執(zhí)行,進(jìn)程號為%d" % (msg, os.getpid())) time.sleep(random.random() * 2) t_stop = time.time() print("%s執(zhí)行完成,耗時(shí)%.2f" % (msg, t_stop - t_start)) while True: number = client.llen('test') print("現(xiàn)在的隊(duì)列任務(wù) 條數(shù)是 ", 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(要調(diào)用的目標(biāo),(傳遞給目標(biāo)的參數(shù)元祖,)) # 每次循環(huán)將會用空閑出來的子進(jìn)程去調(diào)用目標(biāo) po.apply_async(test1, (a[i],)) po.close() # 關(guān)閉進(jìn)程池,關(guān)閉后po不再接收新的請求 po.join() # 等待po中所有子進(jìn)程執(zhí)行完成,必須放在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(要調(diào)用的目標(biāo),(傳遞給目標(biāo)的參數(shù)元祖,)) # 每次循環(huán)將會用空閑出來的子進(jìn)程去調(diào)用目標(biāo) po.apply_async(test1, (a,)) po.close() # 關(guān)閉進(jìn)程池,關(guān)閉后po不再接收新的請求 po.join() # 等待po中所有子進(jìn)程執(zhí)行完成,必須放在close語句之后 print("-----end-----") time.sleep(2) elif number == 0: print("沒有任務(wù)需要處理") time.sleep(2) else: time.sleep(2)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)定時(shí)提取實(shí)時(shí)日志程序
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)定時(shí)提取實(shí)時(shí)日志程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06python實(shí)現(xiàn)蒙特卡羅模擬法的實(shí)踐
?蒙特卡洛就是產(chǎn)生隨機(jī)變量,帶入模型算的結(jié)果,尋優(yōu)方面,本文主要介紹了python 蒙特卡羅模擬法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例
這篇文章主要為大家介紹了Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python 矢量數(shù)據(jù)轉(zhuǎn)柵格數(shù)據(jù)代碼實(shí)例
這篇文章主要介紹了python 矢量數(shù)據(jù)轉(zhuǎn)柵格數(shù)據(jù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09單身狗福利?Python爬取某婚戀網(wǎng)征婚數(shù)據(jù)
今天我就當(dāng)回媒婆,給男性程序員來點(diǎn)福利.今天目標(biāo)爬取征婚網(wǎng)上呈現(xiàn)出來的女生信息保存成excel表格供大家篩選心儀的女生,需要的朋友可以參考下2021-06-06Jupyter notebook 遠(yuǎn)程配置及SSL加密教程
這篇文章主要介紹了Jupyter notebook 遠(yuǎn)程配置及SSL加密教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python無權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式
這篇文章主要介紹了Python無權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12