Redis實現類似同步方法呼叫的功能(一)

2021-08-07 03:28:41 字數 1799 閱讀 9156

首先宣告,這麼幹純粹是為了好玩。

通常我們用redis主要是為了儲存一些資料,由於資料在記憶體裡,所以查詢更新很快。同時我們也可以利用 pub/sub 功能來實現訊息發布/訂閱。但是今天我們來說說怎麼通過redis的list來實現 server - client 的同步通訊。

client 端執行後監聽 server 端派發的請求,然後執行一些操作,並將結果返回給 server 端。

import redis

import time

import json

import threading

host = 'localhost'

port = 6322

queue = 'myqueue'

class

server

(threading.thread):

def__init__

(self):

threading.thread.__init__(self)

defrun(self):

pool = redis.blockingconnectionpool(host=host, port=port, db='0')

conn = redis.redis(connection_pool=pool)

idx = 0

while

true:

idx = idx + 1

key = str(idx)

data = "request_" + key

request =

print

'server: send request: %s' % request

conn.lpush(queue, json.dumps(request))

response = conn.brpop(key, 2)

if response:

print

'server: receive response: %s' % response[1]

else:

print

"server: timeout!!!"

time.sleep(1)

class

client

(threading.thread):

def__init__

(self):

threading.thread.__init__(self)

defrun(self):

pool = redis.blockingconnectionpool(host=host, port=port, db='0')

conn = redis.redis(connection_pool=pool)

while

true:

msg = conn.brpop(queue)[1]

print

'client: receive request: %s' % msg

time.sleep(0.1)

d = json.loads(msg)

key = d.get('id')

d['data'] = "response_" + key

print

'client: send response: %s' % d

conn.lpush(key, json.dumps(d))

conn.expire(key, 5)

server = server()

server.start()

client = client()

client.start()

pjblog實現類似CMS的首頁呼叫

呵呵比較有意思可以看 效果就是那樣的 修改default.asp,建議修改前先複製乙份作為備份。找到 修改為 修改完成後的總 是 複製 如下 if request cateid then dim caters dim trd set caters server.createobject adodb....

如何實現類似nameof的方法

很多時候,我們需要獲取變數本身的名稱,可以用nameof獲取,例如,我們有乙個類 public class myclass 同時,我們寫乙個方法,進行業務處理,需要用變數本身的名稱作為引數 僅僅是示例,不要糾結方法本身有沒有意義 private string test string text 使用時...

redis同步效率秒 用Redis輕鬆實現秒殺系統

導論 秒殺系統的架構設計 秒殺系統,是典型的短時大量突發訪問類問題。對這類問題,有三種優化效能的思路 寫入記憶體而不是寫入硬碟 非同步處理而不是同步處理 分布式處理 用上這三招,不論秒殺時負載多大,都能輕鬆應對。更好的是,redis能夠滿足上述三點。因此,用redis就能輕鬆實現秒殺系統。用我這個方...