Redis Sort 命令簡介

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, ascalpha
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對象

相關文章
相關標籤/搜索