python redis 關(guān)于pipline(),lua腳本和scan命令的初步使用

  • conn=redis.StrictRedis(connection_pool=config_manager_list[str(app_id)].redis_pool,socket_timeout=5,socket_connect_timeout=5, retry_on_timeout=5) 連接數(shù)據(jù)庫

  • r = conn.pipeline() 獲取管道

使用pipelining 發(fā)送命令時(shí),redis server必須部分請(qǐng)求放到隊(duì)列中(使用內(nèi)存)執(zhí)行完畢后一次性發(fā)送結(jié)果
pipeline期間將“獨(dú)占”鏈接,此期間將不能進(jìn)行非“管道”類型的其他操作,直到pipeline關(guān)閉;如果你的pipeline的指令集很龐大,為了不干擾鏈接中的其他操作,你可以為pipeline操作新建Client鏈接,讓pipeline和其他正常操作分離在2個(gè)client中

  • r.hset(name, "JWT", new_JWT) 更新key為name的哈希記錄里叫做 JWT字段的值為new_JWT
  • r.rename(old_name, new_name) 將old_name對(duì)應(yīng)的哈希記錄的key更新為new_name
  • r.execute() 執(zhí)行命令

pipeline和 execute合起來相當(dāng)于使用事務(wù)來操作,可以一次性執(zhí)行多個(gè)命令

#!/usr/bin/python2
import redis
import time
def without_pipeline():
    r=redis.Redis()
    for i in range(10000):
        r.ping()
    return
def with_pipeline():
    r=redis.Redis()
    pipeline=r.pipeline()
    for i in range(10000):
        pipeline.ping()
    pipeline.execute()
    return
def bench(desc):
    start=time.clock()
    desc()
    stop=time.clock()
    diff=stop-start
    print "%s has token %s" % (desc.func_name,str(diff))
if __name__=='__main__':
    bench(without_pipeline)
    bench(with_pipeline)

# 測(cè)試結(jié)果
without_pipeline has token 4.64443057954
with_pipeline has token 0.098383873589

python 調(diào)用lua腳本操作redis

  • s = self.conn.register_script(GET_COUNT_SCRIPT)
  • res = s(args=patterns)
GET_ALL_RID_SCRIPT = """
local cursor = "0"
local matchKey = ARGV[1]
local matchKeyPrefix = string.sub(matchKey,1,-2)
local ridList = {};
local done = false;
repeat
    local result = redis.call("SCAN", cursor, "match", matchKey)
    cursor = result[1];
    for i, key in ipairs(result[2]) do
        local rid = string.gsub(key,matchKeyPrefix,"");
        table.insert(ridList,rid);
    end
    if cursor == "0" then
        done = true;
    end
until done

return ridList;
"""

s = self.conn.register_script(GET_ALL_RID_SCRIPT)
res = s(args=[match])

參考鏈接

scan 命令

通過key '*' 查找所有key
無匹配模式遍歷
有匹配模式遍歷
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、redis連接 redis提供兩個(gè)類Redis和StrictRedis用于實(shí)現(xiàn)Redis的命令,StrictR...
    君惜丶閱讀 232,272評(píng)論 15 117
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 1.1 資料 ,最好的入門小冊(cè)子,可以先于一切文檔之前看,免費(fèi)。 作者Antirez的博客,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,302評(píng)論 1 51
  • 安全性 設(shè)置客戶端連接后進(jìn)行任何其他指令前需要使用的密碼。 警告:因?yàn)閞edis 速度相當(dāng)快,所以在一臺(tái)比較好的服...
    OzanShareing閱讀 1,945評(píng)論 1 7
  • 笙歌一曲醉寒淚, 捂泣揮影笑離殤; 夢(mèng)與佳人共一舞, 卻是天涯各一方。
    霧夜憂魂閱讀 595評(píng)論 3 20

友情鏈接更多精彩內(nèi)容