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排序演算法
- Redis 效能優化Redis優化
- Python 排序---sort與sorted學習Python排序
- Oracle學習系列—資料庫優化—Sort OperationOracle資料庫優化
- 【AIX 學習】效能優化--vmstatAI優化
- 【AIX 學習】效能優化--sarAI優化
- 【AIX 學習】效能優化--topasAI優化
- oracle 學習筆記---效能優化學習(1)Oracle筆記優化
- Oracle效能優化視訊學習筆記-效能優化概念(一)Oracle優化筆記
- Oracle效能優化視訊學習筆記-效能優化概念(二)Oracle優化筆記
- 效能優化的過程學習優化
- oracle 學習總結(效能優化)Oracle優化
- 【AIX 學習】效能優化--iostatAI優化iOS
- 《java學習三》jvm效能優化-------調優JavaJVM優化
- HTTPS 效能優化學習筆記HTTP優化筆記
- ORACLE學習筆記--效能優化FAQ。Oracle筆記優化
- 【AIX 學習】效能優化--iostat (續)AI優化iOS
- oracle 學習筆記---效能優化(1)Oracle筆記優化
- oracle 學習筆記---效能優化(2)Oracle筆記優化
- oracle 學習筆記---效能優化(3)Oracle筆記優化
- oracle 學習筆記---效能優化(4)Oracle筆記優化
- oracle 學習筆記---效能優化(5)Oracle筆記優化
- oracle 學習筆記---效能優化(6)Oracle筆記優化
- oracle 學習筆記---效能優化(7)Oracle筆記優化
- Redis學習筆記六:持久化實驗(AOF,RDB)Redis筆記持久化
- 六、Android效能優化之UI卡頓分析之渲染效能優化Android優化UI
- 《java學習三》jvm效能優化------jconsulJavaJVM優化
- 排序sort排序
- Sort排序排序
- MongoDB aggregate效能優化與排序MongoDB優化排序
- Oracle學習系列—資料庫優化—效能優化工具Oracle資料庫優化
- Session重疊問題學習(六)--極致優化Session優化
- 《java學習二》jvm效能優化-----認識jvmJavaJVM優化
- Nginx效能優化(學習筆記二十五)Nginx優化筆記
- iOS學習筆記-TableView效能優化篇1iOS筆記View優化
- iOS學習筆記-TableView效能優化篇2iOS筆記View優化
- oracle performance tuning效能優化學習系列(三)OracleORM優化
- oracle performance tuning效能優化學習系列(五)OracleORM優化