Redis研究(十九)—命令屬性,redis研究命令屬性

來源:互聯網
上載者:User

Redis研究(十九)—命令屬性,redis研究命令屬性

       Redis的不同命令擁有不同的屬性,如是否是唯讀命令,是否是管理員命令等,一個命令可以擁有多個屬性。在一些特殊情況下不同屬性的命令會有不同的表現,下面來逐一介紹。


1、 REDIS_CMD_WRITE
      擁有REDIS_CMD_WRITE屬性的命令的表現是會修改Redis資料庫的資料。一個唯讀從資料庫會拒絕執行擁有REDIS_CMD_WRI TE屬性的命令,另外在Lua指令碼中執行了擁有REDIS_CMD_RANDOM屬性的命令後,不可以再執行擁有REDIS_CMD_WRITE屬性的命令,否則會提示錯誤:“Write commands not  allowed after non deterministic commands.”擁有REDIS_CMD_WRITE 屬性的命令如下,

SETSETNXSETEXPSETEXAPPENDDELSETBITSETRANGEINCRDECRRPUSHLPUSHRPUSHXLPUSHXLINSERTRPOPLPOPBRPOPBRPOPLPUSHBLPOPLSETLTRIMLREMRPOPLPUSHSADDSREMSMOVESPOPSINTERSTORESUNIONSTORESDIFFSTOREZADDZINCRBYZREMZREMRANGEBYSCOREZREMRANGEBYRANKZUNIONSTOREZINTERSTOREHSETHSETNXHMSETHINCRBYHINCRBYFLOATHDELINCRBYDECRBYINCRBYFLOATGETSETMSETMSETNXMOVERENAMERENAMENXEXPIREEXPIREATPEXPIREPEXPIREATFLUSHDBFLUSHALLSORTPERSISTRESTOREMIGRATEBITOP

2、 REDIS_CMD_DENYOOM
       擁有REDIS_CMD_DENYOOM屬性的命令有可能增加Redis佔用的儲存空間,顯然擁有該屬性的命令都擁有REDIS_CMD_WRI TE屬性,但反之則不然。例如,DEL 命令擁有REDIS_CMD_WRITE屬性,但其總是會減少資料庫的佔用空間,所以不擁有
REDIS_CMD_DENYOOM屬性。
       當資料庫佔用的空間達到了設定檔中maxmemory 參數指定的值且根據maxmemory-policy 參數的空間釋放規則無法釋放空間時,Redis會拒絕執行擁有REDIS_CMD_DENYOOM屬性的命令。
       擁有REDIS_CMD_DENYOOM屬性的命令每次調用時不一定都會使資料庫的佔用空間增大,只是有可能而已。例如,SET命令當新值長度小於舊值時反而會減少資料庫的佔用空間。但無論如何,當資料庫佔用空間超過限制時,Redis都會拒絕執行擁有
REDIS_CMD_DENYOOM屬性的命令,而不會分析其實際上是不是會真的增加空間佔用。擁有REDIS_CMD_DENYOOM屬性的命令,

SETSETNXSETEXPSETEXAPPENDSETBITSETRANGEINCRDECRRPUSHLPUSHRPUSHXLPUSHXLINSERTBRPOPLPUSHLSETRPOPLPUSHSADDSINTERSTORESUNIONSTORESDIFFSTOREZADDZINCRBYZUNIONSTOREZINTERSTOREHSETHSETNXHMSETHINCRBYHINCRBYFLOATINCRBYDECRBYINCRBYFLOATGETSETMSETMSETNXSORTRESTOREBITOP

3、 REDIS_CMD_NOSCRIPT
      擁有REDIS_CMD_NOSCRIPT屬性的命令無法在Redis指令碼中執行。EVAL和EVALSHA命令也擁有該屬性,所以在指令碼中無法調用這兩個命令,即不能在指令碼中呼叫指令碼。
擁有REDIS_CMD_NOSCRIPT屬性的命令如下:

BRPOPBRPOPLPUSHBLPOPSPOPAUTHSAVEMULTIEXECDISCARDSYNCREPLCONFMONITORSLAVEOFDEBUGSUBSCRIBEUNSUBSCRIBEPSUBSCRIBEPUNSUBSCRIBEWATCHUNWATCHEVALEVALSHASCRIPT

4、 REDIS_CMD_RANDOM
       當一個指令碼執行了擁有REDIS_CMD_RANDOM屬性的命令後,就不能執行擁有REDIS_CMD_WRITE屬性的命令了。擁有REDIS_CMD_RANDOM的命令如下,

SPOPSRANDMEMBERRANDOMKEYTIME

5 、REDIS_CMD_SORT_FOR_SCRIPT
      擁有REDIS_CMD_SORT_FOR_SCRIPT屬性的命令會產生隨機結果,在指令碼中調用這些命令時Redis會對結果進行排序。
擁有REDIS_CMD_SORT_FOR_SCRIPT屬性的命令如下,

SINTERSUNIONSDIFFSMEMBERSHKEYSHVALSKEYS

6 、REDIS_CMD_LOADING

      當Redis正在啟動時(將資料從硬碟載入到記憶體中),Redis只會執行擁有REDIS_CMD_LOADI NG屬性的命令。
擁有REDIS_CMD_LOADING屬性的命令如下:

INFOSUBSCRIBEUNSUBSCRIBEPSUBSCRIBEPUNSUBSCRIBEPUBLISH


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.