以下為本人學習Redis的備忘錄,記錄了大部分常用命令 1.客戶端連接redis服務端: 啟動Redis服務端 redis-server /yourpath/redis.conf 啟動Redis命令行客戶端 建立長連接:redis-cli -h 127.0.0.1 -p 6379 若省略參數則將使用 ...
以下為本人學習Redis的備忘錄,記錄了大部分常用命令
1.客戶端連接redis服務端:
- ===啟動Redis服務端
- redis-server /yourpath/redis.conf
- ===啟動Redis命令行客戶端
- 建立長連接:redis-cli -h 127.0.0.1 -p 6379
- 若省略參數則將使用預設值連接伺服器:redis-cli
- 如果在後面直接跟其它命令,則為臨時連接,返回後即關閉:redis-cli get keyname
- 關閉服務端:redis-cli shutdown (可選參數:nosave、save)
2.全局命令(按TAB鍵可自動補齊命令,多次按TAB可切換)所有命令名不區分大小寫
- keys * 遍歷並獲得所有key(可指定匹配模式字元串),含大量key時不要使用
- dbsize 返回鍵總數變數的值
- exists key 檢查key是否存在,存在返回1,否則返回0
- del key [key …] 刪除任意值類型的key,可一次性刪除多個,返回刪除個數
- ttl key 查看key的過期時間,返回>=0表示過期時間,返回-1表示未設置,返回-2表示不存在的key
- type key 返回key的結構類型,不存在返回none
- object encoding key 返回key的值的內部編碼類型
-
SELECT dbindex 選擇當前Redis實例中指定編號的資料庫(不建議使用多資料庫,因為Redis為單線程模型,多資料庫將使用的是同一個CPU,應該使用多個Redis實例),Redis的分散式實現Redis Cluster只允許使用0號資料庫
-
FLUSHDB 清除當前資料庫(鍵值對多時,會阻塞,且是危險的命令,可用rename-command配置來規避該危險)
-
FLUSHALL 清除所有資料庫
- ===
- get key 讀取key對應的value
- mget key [key …] 批量讀取
- mset key value [key value ...] 批量添加、更新
- set key value [EX seconds] [PX milliseconds] [NX|XX] 添加、更新key value,EX、PX表示過期時間,NX表示只添加未存在的key,XX表示只更新已存在的key,成功返回OK,失敗nil
- setex key seconds value 添加、更新key value,並設置過期時間
- setnx key value 只添加未存在的key value
- ===
- incr key 對key的值自增1,返回自增後的值(若key不存在,則先添加,然後自增),若值為非數字則返回錯誤
- incrby key increment 自增指定數值,increment可以是負數
- incrbyfloat key increment 自增指定浮點數值,increment可以是負數(對於浮點數的value,只能用該命令)
- decr key 自減
- decrby key increment 自減指定數值,increment可以是負數
- ===
- setbit key offset value
- setrange key offset value 把字元串索引offset處字元替換為指定value
- getrange key start end 獲取指定索引區域的字元
- append key value 向字元串尾部追加值,返回追加後的字元串長度
- strlen key 返回字元串長度
- getset key value 返回舊值,並設置新值
- ===
- RENAME key newkey 重命名鍵,若newkey已存在,則會被覆蓋
- RENAMENX key newkey 只在newkey不存在時,重命名才會成功,否則返回0
- RANDOMKEY 返回一個隨機的key
- ===鍵過期設置:
- 設置過期時間命令在redis內部最終都使用的是PEXPIREAT
- Redis不支持二級數據結構內部元素的過期功能
- SET key命令預設會清除過期時間!
- SETEX key seconds value 是原子執行的,相當於set+expire組合,可減少一次網路請求
- EXPIRE key seconds 多少秒後過期,過期的key會被自動刪除
- PEXPIRE key milliseconds
- EXPIREAT key timestamp 到達指定時間戳時過期(單位是秒)
- PEXPIREAT key milliseconds-timestamp
- TTL key 查看key的剩餘過期時間(秒)
- PTTL key 毫秒
- PERSIST key 清除過期時間
3.遷移鍵:
在源Redis實例的客戶端上執行MIGRATE命令即可遷移,該命令是原子性的(組合了dump、restore、del命令),直接在源Redis實例和目標Redis實例直接傳輸,傳輸完成返回OK時,表示成功遷移,此時源Redis會根據MIGRATE指定的命令選項決定是否刪除自身對應的key
MIGRATE host port key|”” destination-db timeout [COPY] [REPLACE] [KEYS key[key …]]
如:MIGRATE 127.0.0.1 6380 "" 0 1000 copy keys 002 005 z2 set1
- host port 目標Redis實例地址
- key|””遷移單個key時就指定該key,多個key時用””
- destination-db 目標Redis實例資料庫編號
- timeout 執行遷移的過期時間(毫秒)
- [COPY] 遷移後保留源key
- [REPLACE] 不管目標Redis實例是否已存在遷移的key,都進行遷移並覆蓋目標key的value
- [KEYS key[key …]] 指定要遷移的多個鍵
其它遷移鍵的方式(不建議使用)
move key db 在同一個Redis實例內部的不同資料庫之間遷移數據(僅為了相容舊版)
dump key 和 restore key ttl value 在不同Redis實例之間遷移數據(並非原子性的)
4.遍歷鍵:
- ===遍歷鍵的方式1:一次性全量遍歷
- keys pattern 遍歷所有鍵,返回滿足pattern匹配模式的key(若存在大量鍵,不要使用,阻塞嚴重,可在從節點上執行,這樣就只阻塞從節點,但會影響主從複製)
- * 代表匹配任意字元
- ? 代表匹配一個字元
- [] 代表匹配指定字元列表之一,如[1,3]匹配1或3,[1-10]匹配1到10的任意數字
- \x 轉義*、?等
- ===遍歷鍵的方式2:漸進式遍歷SCAN,每次SCAN只掃描一部分鍵,解決了keys的阻塞問題,每次遍歷的時間複雜度O(1),但一般需要多次scan才能達到目的
- SCAN cursor [MATCH pattern] [COUNT count] 返回當前游標值和遍歷到的所有key
- cursor 游標,當前遍歷起始點,第一次從0開始,每次遍歷完都會返回當前游標值,便於下一次遍歷,返回0時表示遍歷結束
- [MATCH pattern] 匹配模式,和keys的pattern一樣
- [COUNT count] 指定遍歷多少個key,預設為10
- 註意:SCAN的時候,可能添加、刪除、修改了一些鍵,所以SCAN可能會遍歷不到新的鍵,會遍歷到重覆的鍵
- HSCAN key cursor [MATCH pattern] [COUNT count] 針對hash的漸進式遍歷
- SSCAN key cursor [MATCH pattern] [COUNT count] 針對set的漸進式遍歷
- ZSCAN key cursor [MATCH pattern] [COUNT count] 針對zset的漸進式遍歷
5.hash相關命令
- HSET key field value
- HSETNX key field value
- HDEL key field [field ...]
- HEXISTS key field
- HINCRBY key field increment
- HINCRBYFLOAT key field increment
- HKEYS key 獲取所有欄位名
- HVALS key 獲取所有欄位值
- HLEN key 獲取欄位總數
- HSTRLEN key field 獲取欄位值得長度
- HGET key field
- HGETALL key 獲取所有(欄位+值)對,應該少用該命令,用HMGET、HSCAN代替
- HMGET key field [field ...]
- HMSET key field value [field value ...]
- HSCAN key cursor [MATCH pattern] [COUNT count]
6.list列表相關命令(list是有序的、元素可索引訪問、元素可重覆)
- LPUSH key value [value ...] 左邊插入
- LPUSHX key value
- LPOP key 左邊刪除
- ===
- RPUSH key value [value ...] 右邊插入
- RPUSHX key value
- RPOP key 右邊刪除
- RPOPLPUSH source destination
- ===
- LINSERT key BEFORE|AFTER pivot value 在pivot的前面、後面插入value
- LRANGE key start stop 獲取指定索引範圍內的元素(含stop,支持反向索引,0 -1表示返回所有)
- LSET key index value 修改指定索引處的元素
- LTRIM key start stop 裁剪列表,只保留start到stop之間的元素(含stop),清空列表:ltrim list 0 0,然後lpop list
- LINDEX key index 返回指定索引處的value
- LLEN key 獲取列表長度
- LREM key count value 刪除指定個數的值為value的元素,count=0表示刪除所有,count>0表示從左到右刪除count個元素,,count<0表示從右到左刪除count個元素
- BLPOP key [key ...] timeout 阻塞等待timeout秒後,刪除並返回最左邊的元素
- 當列表為空時:若timeout=0,則會一直阻塞直到有元素插入時才返回,若timeout>0,則時間到後返回nil
- 當列表不為空時:若timeout=0,則立即返回,若timeout>0,則時間到後返回
- 如果指定了多個key,則遍歷這些key,只操作第一個有值得key,如 BLPOP list list2 list5 0
- BRPOP key [key ...] timeout
- BRPOPLPUSH source destination timeout
- ===
- 列表的應用:
- 棧:lpush + lpop
- 隊列:lpush + rpop
- 有限集合:lpush + ltrim
- 消息隊列:lpush + brpop
5.無序集合set相關命令(set是無序的、元素不可索引訪問、元素不可重覆)
- SADD key member [member ...] 添加元素,返回成功添加個數
- SREM key member [member ...] 刪除元素,返回成功刪除個數
- SCARD key 返回元素個數
- SMEMBERS key 返回所有元素
- SISMEMBER key member 判斷元素是否存在
- SPOP key [count] 隨機彈出1個元素(刪除)
- SRANDMEMBER key [count] 隨機獲取指定個數的元素,不指定個數則為1個
- SMOVE source destination member 把元素member從source移動到destination中
- ===
- SINTER key [key ...] 取交集
- SINTERSTORE destination key [key ...] 取交集,把結構存到destination中
- SUNION key [key ...] 取並集
- SUNIONSTORE destination key [key ...]
- SDIFF key [key ...] 取差集
- SDIFFSTORE destination key [key ...]
- ===
- SSCAN key cursor [MATCH pattern] [COUNT count]
6.有序集合zset的相關命令
zset按元素的score排序的、元素不可索引訪問、元素不可重覆,但元素的score可重覆;
其中的min、max支持開區間“(”和閉區間“[”,而-inf、+inf分別代表無限小、無限大;
- ZADD key [NX|XX] [CH] [INCR] score member [score member ...] 添加、更新
- ZCARD key 返回成員總數
- ZSCORE key member 返回指定成員的score
- ZCOUNT key min max 返回指定score範圍內成員個數
- ZLEXCOUNT key min max 返回指定字典區間內成員數量
- ZINCRBY key increment member 增加指定成員的score
- ===
- ZRANK key member 返回成員的排名
- ZREVRANK key member
- ===
- ZRANGE key start stop [WITHSCORES] 返回指定排名範圍內的成員
- ZREVRANGE key start stop [WITHSCORES]
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回指定score範圍內的成員
- ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
- ZRANGEBYLEX key min max [LIMIT offset count] 其中的min、max可以為-、+分別代表無限小、無限大
- ZREVRANGEBYLEX key max min [LIMIT offset count] 返回指定字典區間內成員
- ===
- ZREM key member [member ...] 刪除指定成員
- ZREMRANGEBYLEX key min max 刪除指定字典區間內成員
- ZREMRANGEBYRANK key start stop 刪除指定排名區間內成員
- ZREMRANGEBYSCORE key min max 刪除指定score區間內成員
- ===
- ZSCAN key cursor [MATCH pattern] [COUNT count]
- ===
- ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight[weight …]] [aggregate sum|min|max] 取交集,把結果保存到destination,numkeys做交集計算鍵的個數,WEIGHTS表示每個鍵的權重(預設為1,計算時會把每個成員的score乘以權重),aggregate預設為sum(計算交集後,同名成員的score是如何取值的,求和sum、取小min、取大max)
- ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight[weight …]] [aggregate sum|min|max] 取並集