轉載,原文請查看:https://segmentfault.com/a/1190000010999677
一、全域命令
1、查詢鍵
keys * 查詢所有的鍵,會遍歷所有的鍵值,復雜度O(n)
2、鍵總數
dbsize 查詢鍵總數,直接獲取redis內置的鍵總數變數,復雜度O(1)
3、檢查鍵是否存在
exists key 存在回傳1,不存在回傳0
4、洗掉鍵O(k)
del key [key...] 回傳結果為成功洗掉鍵的個數
5、鍵過期
expire key seconds 當超過過期時間,會自動洗掉,key在seconds秒后過期
expireat key timestamp 鍵在秒級時間戳timestamp后過期
pexpire key milliseconds 當超過過期時間,會自動洗掉,key在milliseconds毫秒后過期
pexpireat key milliseconds-timestamp key在豪秒級時間戳timestamp后過期
ttl 命令可以查看鍵hello的剩余過期時間,單位:秒(>0剩余過期時間;-1沒設定過期時間;-2鍵不存在)
pttl是毫秒
192.168.225.129:6379> expire k2 100 (integer) 1 192.168.225.129:6379> ttl k2 (integer) 91 192.168.225.129:6379> ttl ma (integer) -1 192.168.225.129:6379>
6、鍵的資料結構型別
type key 如果鍵hello是字串型別,則回傳string;如果鍵不存在,則回傳none
7、鍵重命名
rename key newkey
renamenx key newkey 只有newkey不存在時才會被覆寫
8、隨機回傳一個鍵
randomkey
9、遷移鍵
(1)move key db (不建議再生產環境中使用)把指定的鍵從源資料庫移動到目標資料庫
(2)dump+restore
dump key
Restore key ttl value
Dump+restore可以實作在不同的redis實體之間進行資料遷移的功能,整個遷移的程序分為兩步;
1)在源redis上,dump命令會將鍵值序列化,格式采用的是RDB格式
2)在目標redis上,restore命令將上面序列化的值進行復原,其中ttl引數代表過期時間,ttl=0代表沒有過期時間
例子:
源redis 192.168.225.129:6379> get redis "world" 192.168.225.129:6379> dump redis "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8" 目標redis 192.168.225.128:6379> get redis (nil) 192.168.225.128:6379> restore redis 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8" OK 192.168.225.128:6379> get redis "world"
(3)migrate
migrate實際上是吧dump、restore、del 3個命令進行組合,從而簡化了操作步驟,
Migrate host port key [ key ......] destination-db timeout [replace]
源redis中執行
192.168.225.129:6379> migrate 192.168.225.128 6379 flower 0 1000 replace
(將鍵flower遷移至目標192.168.225.128:6379的庫0中,超時時間為1000毫秒,replace表示目標庫如果存在鍵flower,則覆寫)
10、遍歷鍵
(1)全量遍歷鍵
keys pattern
例如:keys h , keys [r,l]edis ,keys 等等
(2)漸進式遍歷
scan 它可以有效的解決keys命令存在的阻塞問題,scan每次的額復雜度是O(1)
資料庫管理
1、切換資料庫
select dbIndex
默認16個資料庫:0-15,進入redis后默認是0庫,不建議使用多個資料庫
2、flushdb / flushall
用于清除資料庫,flushdb只清除當前資料庫,flushall清除所有資料庫,
二、針對key的操作
1、設定值 O(1)
set key value [ex] [px] [nx|xx]
ex為鍵值設定秒級過期時間
px為鍵值設定毫秒級過期時間
nx鍵必須不存在,才可以設定成功,用于添加
xx與nx相反,鍵必須存在,才可以設定成功,用于更新
setnx、setex 與上面的nx、ex作用相同
2、獲取值O(1)
get key 不存在則回傳nil
3、批量設定值O(k)
mset key value [key value ......]
mset a 1 b 2 c 3 d 4
4、批量獲取值O(k),k是鍵的個數
mget key [key ......]
5、計數O(1)
incr key
decr key /inceby key increment /decrby key increment
回傳結果分為3中情況:
- 值不是整數,回傳錯誤;
- 值是整數,回傳自增后的結果;
- 鍵不存在,按照值為0自增,回傳結果為1,
6、追加值O(1)
append key value 可以向字串尾部追加值
7、字串長度O(1)
strlen key
每個漢字占用3個字位元組
8、設定并回傳原值O(1)
getset key value
9、設定指定位置的字符O(n),n是字串長度
setrange key offeset value 192.168.225.129:6379> get liming "class4" 192.168.225.129:6379> setrange liming 0 m (integer) 6 192.168.225.129:6379> get liming "mlass4" 192.168.225.129:6379>
10、獲取部分字串
getrange key start end start和end分別為開始和結束的偏移量,偏移量從0開始
三、 Hash操作
1、設定值
hset key field value
還提供了hsetnx命令
Eg:hset user:1 name tom
2、獲取值
hget key field
192.168.225.129:6379> hset user:1 name Tom (integer) 1 192.168.225.129:6379> hget user:1 name "Tom" 192.168.225.129:6379> hget user:1 age (nil)
3、洗掉field
hdel key field [field ......] 會洗掉一個或多個field,回傳結果為成功洗掉fiel的個數
4、計算field的個數
hlen key
5、批量設定或獲取field-value
Hmget key field [field ......]
Hmset key field value [field value]
6、判斷field是否存在
hexists key field
7、獲取所有field
hkeys key
192.168.225.129:6379> hkeys user:1 1) "name" 2) "age" 3) "grand" 4) "city"
8、獲取所有value
hvals key
192.168.225.129:6379> hvals user:1 1) "Tom" 2) "20" 3) "3" 4) "beijing"
9、獲取所有的field、value
hgetall key
10、hincrby hincrbyfloat 作用域是field
hincrby key field
hincrbyfloat key field
11、計算value字串的長度
hstrlen key field
四、串列List操作
串列型別原來存盤多個有序的字串,可以重復
| 串列的4中操作型別 | |
|---|---|
| 操作型別 | 操作 |
| 添加 | rpush 、lpush、linsert |
| 查 | lrange、lindex、llen |
| 洗掉 | lpop 、rpop、 lrem、ltrim |
| 修改 | lset |
| 阻塞操作 | blpop、brpop |
1、添加
(1)從右邊插入元素
rpush key value [value......]
(2)從左邊插入元素
lpush key value [value......]
(3)向某個元素前或者后插入元素
linsert key before|after pivot value
linsert命令會從串列中找到等于pivot的元素,在其前或者后插入一個新的元素value
192.168.225.129:6379> rpush mylist a b c d e f b a (integer) 8 192.168.225.129:6379> linsert mylist after f g (integer) 9 192.168.225.129:6379> lrange mylist 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 7) "g" 8) "b" 9) "a"
2、查找
(1)獲取指定范圍內的元素串列
lrange key start end 索引下標從左到右分別是0到N-1,從右到左分別是-1到-N;end選項包含了自身
lrange key 0 -1 可以從左到右獲取串列的所有元素
lrange mylist 1 3 獲取串列中第2個到第4個元素
(2)獲取串列指定下標的元素
lindex key index
(3)獲取串列長度
llen key
3、洗掉
(1)從串列右側彈出元素
rpop key
(2)從串列左側彈出元素
lpop key
(3)洗掉指定元素
lrem key count value
Lrem命令會從串列中找到=value的元素進行洗掉,根據count的不同分為3中情況
Count>0,從左到有,洗掉最多count個元素Count<0,從右到左,洗掉最多count絕對值個元素Count=0,洗掉所有
串列listaaa為a a a a java php b a b 192.168.225.129:6379> lrem listaaa 5 a (integer) 5 192.168.225.129:6379> lrange listaaa 0 -1 1) "java" 2) "php" 3) "b" 4) "b" 192.168.225.129:6379> lrem listaaa 3 php (integer) 1 192.168.225.129:6379> lrange listaaa 0 -1 1) "java" 2) "b" 3) "b"
4、修改
lset key index newValue 修改指定索引下標的元素
Eg:lset listaaa 1 python 輸出為java python b
5、阻塞操作
blpop key [key ...] timeout
brpop key [key ...] timeout
blpop和brpop是lpop、rpop的阻塞版本,除了彈出方式不同,使用方法基本相同,timeout阻塞時間
(1)串列為空
brpop list:test 3 3秒后回傳
brpop list:test 0 一直處于阻塞中
(2)串列不為空
brpop mylist 0 立刻回傳
192.168.225.129:6379> brpop mylist 0 1) "mylist" 2) "a"
五、Set操作(不可重復)
集合內的操作
1、添加元素
sadd key element [element .....] 回傳結果為添加成功的元素個數
2、洗掉元素
srem key element [element .....] 回傳結果為洗掉成功的元素個數
3、計算元素個數
Scard key scard的時間復雜度為O(1),直接用redis內部的變數
4、判斷元素是否在集合中
Sismember key element 在集合中則回傳1,否則回傳0
5、隨機從集合回傳指定個數元素
Srandmember key [count] count可不寫,默認為1
6、從集合隨機彈出元素
Spop key [count] 3.2版本開始支持[count]
7、獲取所有元素
Smembers key 它和lrange、hgetall都屬于比較重的命令,有時候可以使用sscan來完成
集合間的操作
1、求多個集合的交集 sinter key [ key ......]
2、求多個集合的并集 sunion key [key ......]
3、求多個集合的差集 sdiff key [key ......] 第一個key里面有的,第二個key里面沒有的
4、將交集、并集、差集的結果保存
sinterstore destination key [ key ......]
sunionstore destination key [ key ......]
sdiffstore destination key [ key ......]
例如:sinterstore user:1_2:inter user:1 user:2 user:1_2:incr也是集合型別
六、ZADD操作(有序集合)
集合內
1、添加成員 時間復雜度O(log(n)), sadd為O(1)
zadd key score member[score member .....] 回傳結果為添加成功的元素個數
2、計算成員個數
zcard key scard的時間復雜度為O(1),直接用redis內部的變數
3、計算某個成員分數
zsore key member
4、計算成員的排名
zrank key member
5、洗掉成員
zrem key member [member .......]
6、增加成員的分數
zincrby key increment member
7、回傳指定排名范圍的成員
zrange key start end [withscores] 從低分到高分
zrevrange key start end [withscores] 從高分到低分
8、回傳指定分數范圍的成員
zrange key min max [withscores] [limit offset count ] 按照分數從低分到高分
zrevrange key max min [withscores] [limit offset count ] 按照分數從高分到低分
9、回傳指定分數范圍的成員個數
zcount key min max
10、洗掉指定排名內的升序元素
zremrangebyrank key start end
11、洗掉指定分數范圍的成員
zremrangebystore key min max
集合間的操作
1、交集
2、并集
3、差集
4、將交集、并集、差集的結果保存
七、pub/sub(發布、訂閱)
1、publish channel message 發布訊息 eg:publish channel:sports 'I want to go eatting' 2、subscribe channel [channel .....] 訂閱訊息 eg: subscribe channel:sports 3、unsubscribe channel [channel .....] 取消訂閱 4、psubscribe pattern [pattern ......] 按照模式訂閱 5、unpsubscribe pattern [pattern ......] 按照模式取消訂閱 6、查詢訂閱 pubsub channels 查看活躍的頻道 192.168.225.128:6379> pubsub channels 1) "channel:sports" 2) "__sentinel__:hello" pubsub numsub [channel ......] 查看頻道訂閱數 pubsub numsub channel:sports pubsub numpat 查看模式訂閱數 7、說明: ·客戶端在執行訂閱命令之后進入了訂閱狀態,只能接收四個命令:subscribe、psubscribe、unsubscribe、punsubscribe; ·新開啟的訂閱客戶端,無法收到該頻道之前的訊息,因為redis不會對發布的訊息進行持久化,
八、Transaction(事務)
8.1 discard , 取消執行事務塊內的所有命令 8.2 exec , 執行事務塊內的命令 8.3 multi , 標記一個事務塊的開始 8.4 unwatch , 取消watch命令對所有key的監視 8.5 watch key [key ...] , 監視一個或者多個key,如果事務執行之前,這個kye被其它命令所動,則事務被打斷
九、Connection(連接)
9.1 auth password , 登錄redis時輸入密碼 9.2 echo message , 列印一個特定的資訊message,測驗時使用 9.3 ping , 測驗與服務器的連接,如果正常則回傳pong 9.4 quit , 請求服務器關閉與當前客戶端的連接 9.5 select index , 切換到指定的資料庫
十、Server(服務器)
10.1 bgsave , 后臺異步保存資料到硬碟 10.2 client setname/client getname , 為連接設定、獲取名字 10.3 client kill ip:port , 關閉地址為 ip:port的客戶端 10.4 client list , 以人類可讀的方式,回傳所有的連接客戶端資訊和統計資料 10.5 config get parameter , 取得運行redis服務器的配置引數 10.6 config set parameter value , 設定redis服務器的配置引數 10.7 config resetstat , 重置info命令的某些統計資料 10.8 dbsize , 回傳當前資料庫中key的數量 10.9 flushall , 清空整個redis服務器的資料(洗掉所有資料庫的所有 key) 10.10 flushdb , 清空當前資料庫中的所有key 10.11 info [section] , 回傳redis服務器的各種資訊和統計資料 10.12 lastsave , 回傳最近一次redis成功將資料保存到磁盤時的時間 10.13 monitor , 實時列印出redis服務器接收到的指令 10.14 save , 將當前 Redis 實體的所有資料快照(snapshot)以 RDB 檔案的形式保存到硬碟 10.15 slaveof host port , 將當前服務器轉變為指定服務器的從屬服務器 10.16 slowlog subcommand [argument] , Redis 用來記錄查詢執行時間的日志系統
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/3162.html
標籤:NoSQL
