1. 程式人生 > 資料庫 >基於python實現操作redis及訊息佇列

基於python實現操作redis及訊息佇列

操作 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',2,3)) #向鍵名為list的列表尾部新增1,3 返回長度
print(redis.lpush('list',0))  #向鍵名為list的列表頭部新增0 返回長度
print(redis.llen('list'))  #返回列表的長度
print(redis.lrange('list',3)) #返回起始索引為1 終止索引為3的索引範圍對應的列表
print(redis.lindex('list',1))  #返回索引為1的元素-value
print(redis.lset('list',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',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",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',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(要呼叫的目標,(a,))

    po.close() # 關閉程序池,關閉後po不再接收新的請求
    po.join() # 等待po中所有子程序執行完成,必須放在close語句之後
    print("-----end-----")
    time.sleep(2)
  elif number == 0:
    print("沒有任務需要處理")
    time.sleep(2)
  else:
    time.sleep(2)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。