sort
命令是Redis中最強大的命令之一,本文試圖經過一些例子來總結Redis Sort的經常使用方法。redis
127.0.0.1:6379> RPUSH users 3 4 5 1 33 8 (integer) 6 127.0.0.1:6379> SORT users 1) "1" 2) "3" 3) "4" 4) "5" 5) "8" 6) "33"
在上面的例子中,咱們對一系列的數字進行了排序,獲得了排序後的結果。數組
127.0.0.1:6379> RPUSH users 3 4 5 1 33 8 (integer) 6 127.0.0.1:6379> SORT users limit 1 4 asc alpha 1) "3" 2) "33" 3) "4" 4) "5"
在上面的例子中,咱們使用了三個參數,limit
, asc
和alpha
。limit
表示對結果進行分頁,其中1
表示頁數,4
表示一頁中元素的個數。asc
表示對結果進行正序排序。alpha
表示對結果使用字母序排序,而不是數字序。緩存
# 首先添加一組用戶ID 127.0.0.1:6379> RPUSH users 13 84 23 454 (integer) 4 # 而後添加一些user_age:id key用來表示用戶的年齡 127.0.0.1:6379> set user_age:13 20 OK 127.0.0.1:6379> set user_age:84 23 OK 127.0.0.1:6379> set user_age:23 34 OK 127.0.0.1:6379> set user_age:454 11 # 使用sort命令基於用戶年齡對用戶進行排序 127.0.0.1:6379> sort users by user_age:* desc 1) "23" 2) "84" 3) "13" 4) "454"
在上面的例子中,咱們使用一些值user_age:*
,來對列表進行排序。
咱們經過sort
命令強大的by
參數來設置排序的規則。by
參數除了能夠指定基於鍵值對數據進行排序外,也能夠基於哈希對象進行排序,請看下面這個例子:bash
# 添加一組用戶ID 127.0.0.1:6379> RPUSH users 13 84 23 454 (integer) 4 # 添加了一組哈希對象來表示用戶 127.0.0.1:6379> hmset user:13 age 20 name user_13 OK 127.0.0.1:6379> hmset user:84 age 23 name user_84 OK 127.0.0.1:6379> hmset user:23 age 34 name user_23 OK 127.0.0.1:6379> hmset user:454 age 11 name user_454 OK # 基於哈希對象的來對上面的例子進行排序 127.0.0.1:6379> sort users by user:*->age 1) "454" 2) "13" 3) "84" 4) "23" # 基於哈希對象的來對上面的例子進行排序,並獲取用戶名稱 127.0.0.1:6379> sort users by user:*->age get user:*->name 1) "user_454" 2) "user_13" 3) "user_84" 4) "user_23"
在這個例子中,users
是一個列表用來表示用戶ID,user:*
爲哈希對象用來表示用戶。
在第一個sort
命令中,咱們基於用戶哈希對象的age
字段來進行排序,獲得的結果爲排序事後的用戶ID列表。
若是想要取的返回值不是用戶ID的話,也能夠經過get
參數來指定獲取的字段。
在第二個sort
命令中,咱們仍是經過用戶哈希對象的age
字段來排序,獲取的結果爲用戶哈希對象的name
字段組成的數組。code
# 添加一組用戶ID 127.0.0.1:6379> RPUSH users 13 84 23 454 # 添加一組key用來表示用戶年齡 127.0.0.1:6379> set user_age:13 20 OK 127.0.0.1:6379> set user_age:84 23 OK 127.0.0.1:6379> set user_age:23 34 OK 127.0.0.1:6379> set user_age:454 11 OK # 根據用戶年齡對用戶ID進行排序,並將排序結果存儲在users_sort_result所表明的列表中 127.0.0.1:6379> SORT users by user_age:* desc store users_sort_result (integer) 4 # 爲排序結果設置過時時間 127.0.0.1:6379> expire users_sort_result 30 (integer) 1
在上面的例子中,咱們根據用戶年齡對用戶ID進行了排序,同時爲排序結果設置了一個過時時間,這樣咱們就能夠將排序結果緩存起來了。
而後每回獲取排序結果的時候,咱們能夠先查緩存,若是緩存不存在的話,則進行排序。
須要注意的是,爲了不多個客戶端同時操做排序結果,咱們須要使用SETNX
命令來爲緩存結果設置一個鎖,詳見SETNX key value對象