看看redis是如何進行排序的

redis排序(sort)

redis的排序和其它編程語言排序類似,都可以根據某些比較規則對一系列元素進行有序的排列。redis利用SORT命令可以對redis中的字符串、列表、散列中存儲的數據進行排序。如果讀者之前用過類似關係型數據庫的話,那麼redis的SORT命令可以看做SQL中的order by。

sort 命令

sort命令可以對list的元素進行排序,然後顯示排序的結果,但是不影響redis數據類型中存儲數據的位置。就是說你對list進行元素排序,但是執行lrange命令你會發現內存中的元素的順序是不發生任何變化的。因此sort命令的排序只是顯示結果的排序。

sort排序命令的結構如下:

SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]

下面就通過實例來一一講解SORT排序的命令結構:

例子1、一般排序:

 --像鏈表list中加入實驗數據
 lpush list 1 2 4 5 3
 --查詢數據在listSort鏈表中的物理位置
 lrange list 0 -1
 --簡單排序
 sort list 
 --簡單的降序
 sort list desc

結果如下:(參數什麼都不指定的情況下是按照數字升序排序的,當指定DESC時,將會按照數字降序排序)

看看redis是如何進行排序的

一般排序

例子2、使用ALPHA對字符串進行排序:

--像鏈表list中加入實驗數據
 lpush list hello free world
--對其使用ALPHA排序
sort list alpha

結果如下:(當list表當中有字符串時,可以使用alpha參數對其進行排序,排序的結果是數字被當做是a,字符串之間再按照ASCII值進行排序)

看看redis是如何進行排序的

按字母排序

例子3、使用limit修飾符限制返回結果。

sort list alpha limit 2 5

結果如下:( limit 2 5指的是從list中的第二個偏移量(偏移量是從0,1,2....)開始往後取五個元素內的集合進行排序

看看redis是如何進行排序的

sort limit

BY pattern/get pattern等參數的排序通過下面的一個簡單的學生信息表進行測試。表結構數據如下:

看看redis是如何進行排序的

學生信息表

向redis中添加測試數據,代碼如下:

 --添加四位學生學號
 lpush stulist 1 2 3 4
 
 --添加四位學生信息
 --admin
 mset name_1 admin age_1 25
 --free
 mset name_2 free age_2 29
 --zhangsan
 mset name_3 zhangsan age_3 26
 --redis
 mset name_4 redis age_4 33

例子4、利用BY pattern通過外部key的數據作為權重進行排序,如:按照學生的年齡進行排序,代碼如下:

sort stulist by age_*
看看redis是如何進行排序的

sort by pattern

例子5、按照學生姓名進行排序。代碼如下:

sort stulist by name_* alpha asc
看看redis是如何進行排序的

sort by pattern

我們也可以通過get選項去獲取指定pattern作為新key對應的值.

例子6、比如通過對stulist的學號進行排序獲取到對應學號的學生姓名。代碼如下:

sort stulist get name_*
看看redis是如何進行排序的

sort get pattern

我們也可以利用hash表存儲學生的基本信息,然後再對其進行排序。數據添加代碼如下:

--admin 
hmset stu_1 name admin age 25
--free
hmset stu_2 name free age 29
--zhangsan 
hmset stu_3 name zhanggsan age 26
--redis 
hmset stu_4 name redis age 33

​例子7、通過對年齡字段進行排序獲,代碼如下:(可以用 key->field 的格式來獲取哈希表中的域的值, 其中 key 表示哈希表鍵, 而 field 則表示哈希表的域。)​

sort stulist by stu_*->age
看看redis是如何進行排序的

hash表 sort by

例子8、​通過學號的排序獲取學生基本信息,代碼如下:

sort stulist get # get stu_*->name get stu_*->age
看看redis是如何進行排序的

hash sort get

總結

通過上面的幾個例子我們可以發現redis進行排序時,會根據數據存儲的類型的不同,使用不同的參數進行排序。


分享到:


相關文章: