redis學習(六) 排序(sort,by,store,效能優化)
SORT命令
sort命令可以對列表型別、集合型別和有序集合型別鍵進行排序,並且可以完成與關係型資料庫中連線查詢相類似的任務。
sort key [DESC][ALPHA] [limit offset count ]
1. 如果沒有加上ALPHA引數的話,sort命令會嘗試將所有元素轉為雙精度浮點數來比較,如果無法轉換則會提示錯誤。
2. DESC 命令sort預設按照從小到大的順序排列,加上desc按照從大到小的順序排列
3. limit offset count 獲取從索引offset開始的count個元素
BY引數語法
by命令搭配sort命令使用,語法是 BY 參考鍵
其中參考鍵可以是字串型別鍵或者是雜湊型別鍵的某個欄位(表示為鍵名->欄位名)。如果提供了BY引數,sort
命令將不再依據元素自身的值進行排序,而是對每個元素使用元素的值替換參考鍵中的第一個*並獲取其值,然後根據該值對元素進行排序。
1>by後面是雜湊型別
SORT mykey BY post:*->time desc;
取鍵mykey的值替換* ,就是post:值,獲取鍵post:值的值進行倒序排列。
2>by後面是字串型別
SORT mykey by post:* desc;
note:1. 如果by後面的參考鍵名沒有包含*,sort命令將不會執行排序操作
2. 如果幾個元素的參考鍵值相同,則sort命令會在比較元素本身的值來決定元素的順序。
3. 當某個元素的參考鍵不存在時,會預設參考鍵的值為0
4. 參考鍵雖然支援雜湊型別,但是*只能出現在->符號的前面,出現在後面redis不會認為是常量鍵名,結果還是按照元素大小進行排序,這個比較特殊
GET 引數
SORT命令的get引數,不影響排序,作用是使sort命令的返回結果不再是元素自身的值,而是get引數指定的鍵值,get引數的規則和by引數的規則一樣,get引數也支援字串型別和雜湊型別的鍵,並使用*作為佔位符。要實現在排序後直接返回Id對應的文章標題。
實現按照時間排序後直接返回Id對應的文章標題
sort tag:ruby:posts by posts:->time desc get posts:*->title
1> 一個sort命令中可以有多個get引數(而by引數只能有一個)
sort tag:ruby:posts by post:* -> time desc get post:*->title get post:*->time
2> 如果有n個get引數,每個元素返回的結果就有N行,get #返回的是元素本身,就是上面例子中
鍵 tag:ruby:posts 的 元素
sort tag:ruby:posts by post:*->time desc get post:*->title get #
STORE引數
預設情況下sort會直接返回排序結果,如果希望將排序後的結果儲存,可以使用store引數,如將結果儲存到sort.result鍵中
,直接在sort命令的後面加上sort 鍵 名,並且有鍵的型別會是列表型別,如果鍵已經存在則會覆蓋它,加上store引數後,sort命令的返回值為結果的個數
sort tag:ruby:posts by post:*->time desc get post:*->title store sort.result
效能優化
sort命令的事件複雜度是O(n+mlog(m)),其中n表示要排序的列表(集合或者有序集合中元素的個數),m表示要返回的元素個數。
當n較大時候sort命令的效能相對較低,並且redis在排序前會建立一個長度為n的容器來儲存待排序的元素。
sort命令使用注意:
1> 儘可能減少待排序鍵中元素的資料量 (使n儘可能小)
2>使用limit引數獲取需要的資料 (使m儘可能小)
3>如果要排序的資料量大,可以使用store引數快取結果,便於再次使用
相關文章
- golang sort.Sort () 排序演算法學習Golang排序演算法
- Python 排序---sort與sorted學習Python排序
- Redis 效能優化Redis優化
- MongoDB aggregate效能優化與排序MongoDB優化排序
- 《java學習三》jvm效能優化-------調優JavaJVM優化
- 效能優化的過程學習優化
- 六、Android效能優化之UI卡頓分析之渲染效能優化Android優化UI
- 《java學習三》jvm效能優化------jconsulJavaJVM優化
- sort排序排序
- Redis學習筆記六:持久化實驗(AOF,RDB)Redis筆記持久化
- Nginx效能優化(學習筆記二十五)Nginx優化筆記
- 《java學習二》jvm效能優化-----認識jvmJavaJVM優化
- 堆排序 Heap Sort排序
- Elasticsearch script sort 排序Elasticsearch排序
- 快速排序 (Quick Sort)排序UI
- Collections sort()排序方法排序
- Android效能優化相關的學習記錄(1)Android優化
- 【前端效能優化】vue效能優化前端優化Vue
- Spark學習——效能調優(一)Spark
- Spark學習——效能調優(二)Spark
- Spark學習——效能調優(三)Spark
- 希爾排序(Shell Sort)排序
- 計數排序 - Counting Sort排序
- 插入排序(Insertion Sort)排序
- Redis大叢集擴容效能優化實踐Redis優化
- 效能調優學習之硬體調優
- Orderby 排序優化排序優化
- 【Redis 系列】redis 學習六,redis 事務處理和監控事務Redis
- Redis 優化Redis優化
- Redis 學習筆記(六)Redis 如何實現訊息佇列Redis筆記佇列
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- 深入學習 Redis(2):持久化Redis持久化
- Redis In Action 筆記(四):資料安全和效能優化Redis筆記優化
- Redis 學習筆記(篇七):Redis 持久化Redis筆記持久化
- Array.sort排序問題排序
- go sort.Interface 排序介面Go排序
- SS241115C. 排序(sort)排序
- Collections.sort()方法,字元排序字元排序