Redis學習日記 05 SORT命令

2021-09-19 02:59:34 字數 3247 閱讀 6223

目錄

總結

在進行資料排序的時候很容易想到使用zset(有序集合)。然而有序集合常見的使用場景是大資料排序,如遊戲玩家排行榜等,所以很少獲取鍵中的全部資料。然而在redis中對資料的排序除了用有序集合外還可以使用sort命令。

sort命令可以對列表、集合、有序集合型別的鍵進行排序。

以列表型別為例:

127.0.0.1:6379> lrange post 0 -1

1) "2"

2) "1"

3) "3"

127.0.0.1:6379> sort post

1) "1"

2) "2"

3) "3"

127.0.0.1:6379> sort post desc

1) "3"

2) "2"

3) "1"

在sort命令後面加上desc選項即可將元素逆序排序

127.0.0.1:6379> lrange strlist 0 -1

1) "d"

2) "b"

3) "c"

4) "b"

5) "a"

加上alpha選項(如果不加該選項會報錯:(error) err one or more scores can't be converted into double)

127.0.0.1:6379> sort strlist alpha

1) "a"

2) "b"

3) "b"

4) "c"

5) "d"

該選項會按照字典順序排序。

示例1

127.0.0.1:6379> hget post:1 count

"10"

127.0.0.1:6379> hget post:2 count

"15"

127.0.0.1:6379> hget post:3 count

"5"127.0.0.1:6379> lrange post 0 -1

1) "2"

2) "1"

3) "3"

127.0.0.1:6379> sort post by post:*->count

1) "3"

2) "1"

3) "2"

127.0.0.1:6379> lrange post 0 -1

1) "4"

2) "2"

3) "1"

4) "3"

127.0.0.1:6379> hget post:4 count

(nil)

127.0.0.1:6379> sort post by post:*->count

1) "4"

2) "3"

3) "1"

4) "2"

127.0.0.1:6379> lrange post 0 -1

1) "4"

2) "2"

3) "1"

4) "3"

127.0.0.1:6379> sort post limit 1 3

1) "2"

2) "3"

3) "4"

limit選項後面可以跟兩個引數,乙個是offset,代表從那個位置開始;另乙個是count,代表取多少個元素。和mysql的limit語法很像。

示例1

127.0.0.1:6379> sort post by post:*->count get post:*->time

1) (nil)

2) "423"

3) "123"

4) "234"

例項2

127.0.0.1:6379> sort post by post:*->count get post:*->time get #

1) (nil) ---post:*->time代表的值

2) "4" ---元素本身的值

3) "423"

4) "3"

5) "123"

6) "1"

7) "234"

8) "2"

針對上面get命令示例2中的資料,再附加store選項:

127.0.0.1:6379> sort post by post:*->count get post:*->time get # store sort:result

(integer) 8

127.0.0.1:6379> type sort:result

list

127.0.0.1:6379> lrange sort:result 0 -1

1) ""

2) "4"

3) "423"

4) "3"

5) "123"

6) "1"

7) "234"

8) "2"

可以看到store選項後面跟了乙個引數鍵sort:result,這個鍵可以是之前不存在的,命令執行後,會將排序返回的結果存放到該鍵中以列表的形式存在。

sort是redis最強大的命令之一,如果使用不當會造成效能瓶頸。sort的時間複雜度為o(n+mlog(m)),其中n表示待排序元素的數量,m表示返回的元素數量。當n很大時,redis在排序前建立乙個長度為n的容器來儲存待排序元素,因此同時進行大資料量的排序不管是在時間還是空間上消耗很多,從而降低效能。

因此使用sort命令時應該注意以下幾點:

盡可能減少待排序鍵中的元素;

盡可能減少排序之後返回的資料,你可以使用上面提到的limit選項來控制;

如果排序返回的結果較多,盡可能使用上面提到的store將排序結果快取起來。

posted @

2018-08-30 14:28

徐小賤的blog 閱讀(

...)

編輯收藏

前端學習日記05

讓標籤相對於某個元素重新定義乙個新的位置,可以相對於元素本身的位置,或者相對于父元素,甚至相對於瀏覽器視窗進行定位 屬性 position 值 1 relative 相對定位 特點 相對於元素本身的位置 不脫離文件流,仍然佔位 使用場景 微調元素位置 2 absolute 絕對定位 相對於離他最近的...

redis學習日記

remote dictionary server redis 是乙個由salvatore sanfilippo寫的key value儲存系統。redis提供了一些豐富的資料結構,包括 lists,sets,ordered sets 以及 hashes 當然還有和memcached一樣的 string...

Redis學習日記

redis是乙個開源的使用ansi c語言編寫 遵守bsd協議 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫 並提供多種語言的api。它通常被稱為資料結構伺服器,因為值可以是字串 string 雜湊 hash 列表 list 集合 sets 和有序集合 sort sets re...