在Redis中,SETIFABSENT
命令用于在鍵不存在時將其設置為指定的值。但是,Redis本身并沒有提供內置的方法來監控SETIFABSENT
命令的執行狀態。要實現這個功能,你可以使用Redis的發布/訂閱(Pub/Sub)機制或者通過跟蹤命令執行的時間戳來實現。
方法一:使用發布/訂閱(Pub/Sub)機制
PUBLISH command_status "SETIFABSENT"
SETIFABSENT
命令時,都向同一個頻道發布一條消息,包含命令的詳細信息。import redis
r = redis.Redis()
def set_if_absent(key, value):
result = r.set(key, value, ex=None, nx=True)
if result:
# 發布命令執行狀態
r.publish("command_status", f"SETIFABSENT {key} {value}")
return result
command_status
頻道,以便在命令執行時接收通知。def subscribe_to_commands():
pubsub = r.pubsub()
pubsub.subscribe("command_status")
print("Listening for command status...")
for message in pubsub.listen():
if message['type'] == 'message':
data = message['data'].decode('utf-8')
print(f"Command executed: {data}")
方法二:跟蹤命令執行的時間戳
SETIFABSENT
命令之前,記錄當前時間戳。import time
timestamp = time.time()
SETIFABSENT
命令之后,檢查時間戳是否發生變化。如果時間戳發生變化,說明命令已經執行。result = r.set(key, value, ex=None, nx=True)
if result:
# 檢查時間戳是否發生變化
if time.time() != timestamp:
print("SETIFABSENT command executed")
else:
print("SETIFABSENT command did not execute")
請注意,這兩種方法都需要你修改應用程序代碼。如果你希望在Redis服務器端監控命令執行狀態,你可能需要考慮使用Redis的Lua腳本或者擴展功能。