Redis Sort 命令簡介

2021-08-11 09:49:52 字數 3233 閱讀 3703

sort命令是redis中最強大的命令之一,本文試圖通過一些例子來總結redis sort的常用方法。

127.0.0.1:6379> rpush users 345

1338(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 345

1338(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

8423

454(integer) 4

# 然後新增一些user_age:id key用來表示使用者的年齡

127.0.0.1:6379> set user_age:13

20ok

127.0.0.1:6379> set user_age:84

23ok

127.0.0.1:6379> set user_age:23

34ok

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引數除了可以指定基於鍵值對資料進行排序外,也可以基於雜湊物件進行排序,請看下面這個例子:

# 新增一組使用者id

127.0.0.1:6379> rpush users 13

8423

454(integer) 4

# 新增了一組雜湊物件來表示使用者

127.0.0.1:6379> hmset user:13 age 20 name user_13

ok127.0.0.1:6379> hmset user:84 age 23 name user_84

ok127.0.0.1:6379> hmset user:23 age 34 name user_23

ok127.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字段組成的陣列。

# 新增一組使用者id

127.0.0.1:6379> rpush users 13

8423

454# 新增一組key用來表示使用者年齡

127.0.0.1:6379> set user_age:13

20ok

127.0.0.1:6379> set user_age:84

23ok

127.0.0.1:6379> set user_age:23

34ok

127.0.0.1:6379> set user_age:454

11ok

# 根據使用者年齡對使用者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

type命令簡介

簡介type命令用來顯示指定命令的型別。乙個命令的型別可以是如下之一 type命令是linux系統的一種機制,知道了是那種型別,我們就可以針對性的獲取幫助。比如內建命令可以用help命令來獲取幫助,外部命令用man或者info來獲取幫助。type命令的基本使用方式就是直接跟上命令名字。type a可...

whois命令簡介

whois 命令簡介 一 概述 whois 是linux unix 環境下的命令,按字面意思就是問 他是誰 通過對網域名稱的檢索 可以反饋回網域名稱的註冊資訊 包括持有人 管理資料以及技術聯絡資料 也包括該網域名稱的網域名稱伺服器。但是在世界上有幾個主要的 whois 伺服器,它們是whois.ri...

dd命令簡介

1.dd命令簡介 功能 把指定的輸入檔案拷貝到指定的輸出檔案中,並且在拷貝過程中可以進行格式轉換。可以用該命令實現dos下的diskcopy命令的作用。先用dd命令把軟盤上的資料寫成硬碟的乙個寄存盤案,再把這個寄存盤案寫入第二張軟盤上,完成diskcopy的功能。需要注意的是,應該將硬碟上的寄存盤案...