1. 程式人生 > >reds操作命令詳解

reds操作命令詳解

key pattern 查詢相應的key

(1)redis允許模糊查詢key  有3個萬用字元  *、?、[]

(2)randomkey:返回隨機key

(3)type key:返回key儲存的型別

(4)exists key:判斷某個key是否存在

(5)del key:刪除key

(6)rename key newkey:改名

(7)renamenx key newkey:如果newkey不存在則修改成功

(8)move key 1:將key移動到1資料庫

(9)ttl key:查詢key的生命週期(秒)

(10)expire key 整數值:設定key的生命週期以秒為單位

(11)pexpire key 整數值:設定key的生命週期以毫秒為單位

(12)pttl key:查詢key 的生命週期(毫秒)

(13)perisist key:把指定key設定為永久有效

二、字串型別的操作

(1)set key value [ex 秒數] [px 毫秒數] [nx/xx]

如果ex和px同時寫,則以後面的有效期為準

nx:如果key不存在則建立

xx:如果key存在則修改其值

(2)get key:取值

(3)mset key1 value1 key2 value2 一次設定多個值

(4)mget key1 key2 :一次獲取多個值

(5)setrange key offset value:把字串的offset偏移位元組改成value

如果偏移量 > 字串長度,該字元自動補0x00

(6)append key value :把value追加到key 的原值上

(7)getrange key start stop:獲取字串中[start, stop]範圍的值

對於字串的下標,左數從0開始,右數從-1開始

注意:當start>length,則返回空字串

當stop>=length,則擷取至字串尾

如果start所處位置在stop右邊,則返回空字串

(8)getset key nrevalue:獲取並返回舊值,在設定新值

(9)incr key:自增,返回新值,如果incr一個不是int的value則返回錯誤,incr一個不存在的key,則設定key為1

(10)incrby key 2:跳2自增

(11)incrbyfloat by 0.7: 自增浮點數

(12)setbit key offset value:設定offset對應二進位制上的值,返回該位上的舊值

注意:如果offset過大,則會在中間填充0

offset最大到多少

2^32-1,即可推出最大的字串為512M

(13)bitop operation destkey key1 [key2..]    對key1 key2做opecation並將結果儲存在destkey上

opecation可以是AND OR NOT XOR

(14)strlen key:取指定key的value值的長度

 (15)setex key time value:設定key對應的值value,並設定有效期為time秒 

三、連結串列操作

Redis的list型別其實就是一個每個子元素都是string型別的雙向連結串列,連結串列的最大長度是2^32。list既可以用做棧,也可以用做佇列。

list的pop操作還有阻塞版本,主要是為了避免輪詢

(1)lpush key value:把值插入到連結串列頭部

(2)rpush key value:把值插入到連結串列尾部

(3)lpop key :返回並刪除連結串列頭部元素

(4)rpop key: 返回並刪除連結串列尾部元素

(5)lrange key start stop:返回連結串列中[start, stop]中的元素

(6)lrem key count value:從連結串列中刪除value值,刪除count的絕對值個value後結束

count > 0 從表頭刪除  count < 0 從表尾刪除  count=0 全部刪除

(7)ltrim key start stop:剪下key對應的連結,切[start, stop]一段並把改制重新賦給key

(8)lindex key index:返回index索引上的值

(9)llen key:計算連結串列的元素個數

(10)linsert key after|before search value:在key 連結串列中尋找search,並在search值之前|之後插入value

(11)rpoplpush source dest:把source 的末尾拿出,放到dest頭部,並返回單元值

應用場景: task + bak 雙鏈表完成安全佇列

業務邏輯: rpoplpush task bak

接收返回值並做業務處理

如果成功則rpop bak清除任務,如果不成功,下次從bak表取任務

(12)brpop,blpop key timeout:等待彈出key的尾/頭元素

timeout為等待超時時間,如果timeout為0則一直等待下去

應用場景:長輪詢ajax,線上聊天時能用到

四、hashes型別及操作

Redis hash 是一個string型別的field和value的對映表,它的新增、刪除操作都是O(1)(平均)。hash特別適用於儲存物件,將一個物件儲存在hash型別中會佔用更少的記憶體,並且可以方便的存取整個物件。

配置: hash_max_zipmap_entries 64 #配置欄位最多64個

hash_max_zipmap_value 512 #配置value最大為512位元組

(1)hset myhash field value:設定myhash的field為value

(2)hsetnx myhash field value:不存在的情況下設定myhash的field為value

(3)hmset myhash field1 value1 field2 value2:同時設定多個field

(4)hget myhash field:獲取指定的hash field

(5)hmget myhash field1 field2:一次獲取多個field

(6)hincrby myhash field 5:指定的hash field加上給定的值

(7)hexists myhash field:測試指定的field是否存在

(8)hlen myhash:返回hash的field數量

(9)hdel myhash field:刪除指定的field

(10)hkeys myhash:返回hash所有的field

(11)hvals myhash:返回hash所有的value

(12)hgetall myhash:獲取某個hash中全部的field及value

五、集合結構操作

特點:無序性、確定性、唯一性

(1)sadd key value1 value2:往集合裡面新增元素

(2)smembers key:獲取集合所有的元素

(3)srem key value:刪除集合某個元素

(4)spop key:返回並刪除集合中1個隨機元素(可以坐抽獎,不會重複抽到某人)

(5)srandmember key:隨機取一個元素

(6)sismember key value:判斷集合是否有某個值

(7)scard key:返回集合元素的個數

(8)smove source dest value:把source的value移動到dest集合中

(9)sinter key1 key2 key3:求key1 key2 key3的交集

(10)sunion key1 key2:求key1 key2 的並集

(11)sdiff key1 key2:求key1 key2的差集

(12)sinterstore res key1 key2:求key1 key2的交集並存在res裡

六、有序集合

概念:它是在set的基礎上增加了一個順序屬性,這一屬性在新增修改元素的時候可以指定,每次指定後,zset會自動按新的值調整順序。可以理解為有兩列的mysql表,一列儲存value,一列儲存順序,操作中key理解為zset的名字。

和set一樣sorted,sets也是string型別元素的集合,不同的是每個元素都會關聯一個double型的score。sorted set的實現是skip list和hash table的混合體。

當元素被新增到集合中時,一個元素到score的對映被新增到hash table中,所以給定一個元素獲取score的開銷是O(1)。另一個score到元素的對映被新增的skip list,並按照score排序,所以就可以有序地獲取集合中的元素。新增、刪除操作開銷都是O(logN)和skip list的開銷一致,redis的skip list 實現是雙向連結串列,這樣就可以逆序從尾部去元素。sorted set最經常使用方式應該就是作為索引來使用,我們可以把要排序的欄位作為score儲存,物件的ID當元素儲存。

(1)zadd key score1 value1:新增元素

(2)zrange key start stop [withscore]:把集合排序後,返回名次[start,stop]的元素  預設是升續排列  withscores 是把score也打印出來

(3)zrank key member:查詢member的排名(升序0名開始)

(4)zrangebyscore key min max [withscores] limit offset N:集合(升序)排序後取score在[min, max]內的元素,並跳過offset個,取出N個 

(5)zrevrank key member:查詢member排名(降序 0名開始)

(6)zremrangebyscore key min max:按照score來刪除元素,刪除score在[min, max]之間

(7)zrem key value1 value2:刪除集合中的元素

(8)zremrangebyrank key start end:按排名刪除元素,刪除名次在[start, end]之間的

(9)zcard key:返回集合元素的個數

(10)zcount key min max:返回[min, max]區間內元素數量

(11)zinterstore dest numkeys key1[key2..] [WEIGHTS weight1 [weight2...]] [AGGREGATE SUM|MIN|MAX]

求key1,key2的交集,key1,key2的權值分別是weight1,weight2

聚合方法用 sum|min|max

聚合結果 儲存子dest集合內

注意:weights,aggregate如何理解?

答:如果有交集,交集元素又有score,score怎麼處理?aggregate num->score相加,min最小score,max最大score,另外可以通過weights設定不同的key的權重,交集時  score*weight

七、伺服器相關命令

(1)ping:測定連線是否存活

(2)echo:在命令列列印一些內容

(3)select:選擇資料庫

(4)quit:退出連線

(5)dbsize:返回當前資料庫中key的數目

(6)info:獲取伺服器的資訊和統計

(7)monitor:實時轉儲收到的請求

(8)config get 配置項:獲取伺服器配置的資訊

config set 配置項  值:設定配置項資訊

(9)flushdb:刪除當前選擇資料庫中所有的key

(10)flushall:刪除所有資料庫中的所有的key

(11)time:顯示伺服器時間,時間戳(秒),微秒數

(12)bgrewriteaof:後臺儲存rdb快照

(13)bgsave:後臺儲存rdb快照

(14)save:儲存rdb快照

(15)lastsave:上次儲存時間

(16)shutdown [save/nosave]

注意:如果不小心運行了flushall,立即shutdown nosave,關閉伺服器,然後手工編輯aof檔案,去掉檔案中的flushall相關行,然後開啟伺服器,就可以倒回原來是資料。如果flushall之後,系統恰好bgwriteaof了,那麼aof就清空了,資料丟失。

(17)showlog:顯示慢查詢

問:多慢才叫慢?

答:由slowlog-log-slower-than 10000,來指定(單位為微秒)

問:伺服器儲存多少條慢查詢記錄

答:由slowlog-max-len 128,來做限制