標籤:link 實現 好友 單位 構建 store get 提升 數字
redis是什嗎?
redis開源的,構建於記憶體的資料結構的nosql資料庫。常被用於資料存放區,緩衝處理和訊息處理。
redis的優勢?
1、極高的讀寫能力
2、豐富的資料類型
3、原子性操作
4、支援主從熱備
redis的使用情境?
1、登入之後的會話儲存,相較於使用memcached作為快取資料庫,資料更加安全
2、熱門排行榜/計數器,比如一些秀場類的項目,常常會會有一些前多少名的主播排名,還有一些文章閱讀量的技術,或者新浪微博的點贊數等
3、作為訊息佇列,比如celery就可以使用redis作為中間人
4、好友關係,微博的好友關係使用redis實現
redis鍵的基本操作命令:
1、keys pattern
功能:查詢所有符合匹配模式的所有的鍵名
pattern匹配模式的用法:
?:任意一個字元
*:任意個字元
[ae]:a或e
[^ae]:除了a和e
[a-e]:a-e範圍內的一個字元
[^a-e]:除了a-e的一個字元
[1-11]:1-11範圍內的一個字元
[^1-11]:除了1-11的一個字元
傳回值:返回所有符合匹配模式的所有的鍵名
exp:keys *
2、exists key [key...]
功能:檢查redis中給定的key鍵(可以為一個或者多個)是否存在
傳回值:因為key可以不存在也可以重複,返回這些key鍵在redis中存在的數量,key可以重複,傳回值統計數量不去重
exp:exists key1 key2 ...
3、SCAN cursor [MATCH pattern] [COUNT count]
功能:scan命令每次被調用是會返回新的遊標cursor和本次執行命令列出的所有key,使用者在下次迭代的時候可以使用新的遊標cursor作為scan命令的遊標參數,以此來延續之前的迭代過程,直到返回的新的cursor為0的時候,最終列出所有的符合pattern匹配模式的key。這種方式相較於使用keys pattern的方式查詢key麻煩許多,但是當你的key非常多的時候,使用scan方式效率上明顯會提升。
pattern的用法:與keys pattern命令中的pattern用法一致
count參數:代表本次掃描想要列出的key的個數,但是實際上會列出的key的個數並不一定會是count參數的值,這個參數是不精準的
傳回值:遍曆符合pattern的所有key資料,這些key可能會有重複,需要在用戶端程式應用中進行判斷
exp:sacn 0
sacn 0 match key?
scan 0 match key[1-8] count 5
4、randomkey
功能:隨機返回redis資料庫中的一個key
傳回值:一個鍵名
exp:randomkey
5、type key
功能:查詢一個key鍵的類型
傳回值:如果key存在,返回儲存在該鍵上資料的資料類型的表現形式,不同的類型共有string,list,set,zset,hash五種。如果key不存在,則返回none。
exp:type key1
6、object subcommand [arguments [arguments ...]]
功能:從內部查看給定key的redis對象(key所對應的具體對象)
subcommand子命令:
object refcount key:返回當前key對應的對象的引用次數
object idletime key:返回當前key對應的對象的空閑時間
object encoding key:返回當前key對應的對象的資料類型,如‘int‘,‘quicklist‘,‘embstr‘等等
傳回值:refcount/idletime返回數字,encoding返回redis對象的編碼類別型
注意:如果某個對象的encoding為‘int‘,並且這個對象的值在0-9999之間,那麼他的refcount引用次數會一直為2147483647,而其他的類型或者不在該範圍內的資料則會返回具體的引用次數。
exp: object refcount key1
object encoding key1
object idletime key1
7、rename key newkey
功能:給key重新命名為newkey,如果newkey已經存在,則key所指向的資料會覆蓋已存在的newkey的資料
傳回值:1、成功則返回OK
2、如果被更名的key在redis中不存在,則會報錯。
exp: rename username name
8、renamenx key newkey
功能:若且唯若newkey不存在時給key重新命名為newkey
傳回值:1、舊名稱key在redis中不存在,則會報錯
2、重新命名成功則返回1
3、新名稱newkey已經存在於redis中則返回0
exp: renamenx username name
9、touch key [key...]
功能:觸碰一下key(可以為多個),把key的最後訪問時間變為目前時間,當然這個對象的空閑時間就會變成0。
傳回值:因為key可以不存在也可以重複,傳回值為實際touch到的key的數量(key存在且重複不回去重數量)
exp:
touch username
object idletime username
10、del key [key...]
功能:刪除key,可以是多個,屬於阻塞式刪除
傳回值:如果key不存在,則返回零,如果多個key,則返回實際刪除的key的個數,這裡相較於exists和touch的傳回值,如果key重複,在傳回值計算數量時會去重返回
exp:del username
del key1 key2 username
11、unlink key [key...]
功能:刪除key,可以是多個,屬於非阻塞式刪除,用法與del相同,但相對於del,效率更高
傳回值:如果key不存在,則返回零,如果多個key,則返回實際刪除的key的個數,這裡相較於exists和touch的傳回值,如果key重複,在傳回值計算數量時會去重返回
exp:unlink username
unlink key1 key2 username
12、expire key seconds
功能:為給定的key設定多少秒後到期(如果該給定的key已經設定了到期時間,則為更改到期時間操作)。如果設定的seconds小於0等於0,則該鍵key立刻會被刪除。
傳回值:1、設定成功返回1
2、否則key不存在或者設定失敗返回0
exp:expire age 60
13、expireat key timestamp
功能:為key設定具體的到期時間點,時間點為Unix時間戳記
傳回值:1、成功則返回1
2、當key不存在或者沒辦法設定到期時間則返回0
exp:expireat username 1600000000
14、pexpire key milliseconds
功能:與expire一致,只不過是值得數值為毫秒
傳回值:1、設定成功返回1
2、當key不存在或者沒辦法設定到期時間則返回0
exp:pexpire age 60000
15、pexpireat key milliseconds-timestamp
功能:與pexpire功能一致,只不過設定的時間戳記為毫秒層級
傳回值:1、成功則返回1
2、當key不存在或者沒辦法設定到期時間則返回0
exp:pexpireat username 1600000000000
16、ttl key
功能:返回以秒為單位的key的剩餘到期時間
傳回值:1、當key不存在的時候,返回-2
2、當key存在但是沒有設定到期時間,返回-1
3、否則,以秒為單位,返回key的剩餘到期時間
exp:ttl username
17、pttl key
功能:與ttl一樣,只不過返回的剩餘到期時間是以毫秒為單位的值
18、persist key
功能:移除給定的key的存留時間,將這個key轉換成持久的
傳回值:1、移除成功返回1
2、key不存在或者未設定到期時間返回0
exp:persist age
19、dump key
功能:序列化給定的key並返回序列化的結果,便於傳輸等操作,序列化的結果不包含任何到期時間相關資訊
傳回值:1、如果成功則返回被序列化的結果(特殊格式的字串)
2、如果key不存在則返回nil
exp: dump username
20、restore key ttl serialized-value [REPLACE]
功能:還原序列化給定的序列化字串,將得到的結果和給定的key關聯,並且設定到期時間長度為以毫秒為單位的ttl(如果ttl為0則代表新產生的key永久有效)。如果key已經存在,此時如果使用replace則會覆蓋原來的key,如果未使用replace,則會報錯
傳回值:1、如果成功則返回OK
2、給定的key已經存在,但是未使用replace參數,會報錯
21、sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
功能:返回或者儲存給定的列表,集合,有序集合中經過排序的結果。排序預設以數字為對象,值被解釋為雙精確度浮點數,然後進行比較
傳回值:1、未使用store參數,則返回排序過後的列表形式的結果
2、如果使用了store參數,則把排序結果儲存到給定的destination鍵裡,並返回結果元素數量。如果destination為已經存在的key,則原來的key的內容將會被覆蓋
exp:lpush nums 1 4 21 3 21 43 20
sort nums store newkey
sort nums desc store newkey limit 2 3
22、move key db
功能:相同執行個體之間的不同庫之間的資料移轉,將當前資料庫的key移動到指定資料庫db當中。如果目標資料庫存在該key,或者當前資料庫不存在該key,那麼move沒有任何效果。注意這個操作是移動不是複製。
傳回值:如果移動成功,則返回1。如果沒有move效果,則返回0
exp:move username 1
23、migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]
功能:多個執行個體之間的資料移轉,將key原子性的從當前執行個體移動到目標執行個體的指定資料庫上,一旦傳送成功,則會保證key出現在目標執行個體指定的資料庫上,而當前庫中的key將被刪除。timeout參數為以毫秒為單位的時間逾時時間,如果逾時則會傳送失敗。如果目標執行個體的指定庫裡面有該key,此時如果使用replace,目標執行個體上的該key將會被覆蓋,否則將會傳送失敗。因為該操作是原子性的,他在執行的時候會阻塞正在遷移的兩個執行個體直到發生以下時間,遷移成功,遷移失敗,遷移逾時。注意如果使用copy參數,則會是複製,原執行個體中的key將會被保留。如果沒使用copy,則就是移動。
如果想要移動多個key,那麼key參數可以傳遞一個‘ ‘佔位,然後添加keys參數即可
exp:migrate 192.168.12.133 6379 username 0 2000 copy replace
migrate 192.168.12.133 6379 "" 0 3000 copy replace key1 key2 key3
redis鍵的基本操作