亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

吐血整理系列 Redis與Jedis排序

發布時間:2020-06-25 08:42:10 來源:網絡 閱讀:268 作者:wx5deb0084464f6 欄目:編程語言

在優銳課學習筆記中,我們將討論Redis SORT命令。

Redis提供了SORT命令,我們可以使用該命令從LIST,SET或ZSET中檢索或存儲排序的值。

以最簡單的形式,我們可以在KEY上使用命令,如下面的示例所示:

SORT numbers_list

這將對鍵中包含的值進行排序并返回它們。 該命令將值排序為數字。 因此,假設我們有一個包含以下值的列表:

1, 110, 5

上面的命令將返回:

1 5 110

我們可以指定使用ALPHA修飾符按字母順序對值進行排序。 有許多修飾符。 我們將在下面的示例中查看其中的一些。 這些示例將使用Jedis API。
對于我們的示例,讓我們考慮一下我們有一個想法管理系統。 我們有一個包含系統中所有用戶名的列表:

all:users [junior, francisco, ribeiro, user4]

對于每個用戶名,將有一個包含用戶信息的哈希:

user:
user:junior
  - name: "Junior User"
  - num_ideas : "5"
  - email:"fjunior@email.com"
user:francisco
 - name: "Francisco User"
 - num_ideas: "4"
 - email: "francisco@email.com"
...

對于我們的示例,我們可以看到一個將填充Redis的類:


package br.com.xicojunior.redistest;
import java.util.HashMap;
import java.util.Map;
import redis.clients.jedis.Jedis;
public class App 
{
    public static Jedis jedis = new Jedis("localhost");   
    public static void main( String[] args ){
        String names[] = new String[]{"junior", "francisco", "ribeiro", "user4"};
        for(String name: names){
            jedis.lpush("all:users", name);
        }
        addUserHash(names[0], "Junior User", "junior@junior.com", "5");
        addUserHash(names[1], "Francisco User", "francisco@francisco.com", "4");
        addUserHash(names[2], "Ribeiro User", "ribeiro@ribeiro.com", "3");
        addUserHash(names[3], "User 4", "user@user.com", "2");
        for(String name: names){
            System.out.println(jedis.hgetAll("user:".concat(name)));
        }
        System.out.println(jedis.lrange("all:users", 0, -1));
    }
    public static void addUserHash(String username, String name, String email, String numberOfIdeas){
        Map<String, String> userProp = new HashMap<String, String>();
        userProp.put("name",name);
        userProp.put("email", email);
        userProp.put("num_ideas", String.valueOf(numberOfIdeas));
        jedis.hmset("user:".concat(username), userProp);
    }
}

讓我們看下面的代碼示例:

package br.com.xicojunior.redistest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
public class SortTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        //[1]sorting the usernames
        System.out.println(jedis.sort("all:users"));
        //[ribeiro, francisco, junior, user4]
        //[2]sorting the username alpha
        //jedis sort method receives a SortingParams instance for modifiers
        System.out.println(jedis.sort("all:users", new SortingParams().alpha()));
        //[francisco, junior, ribeiro, user4]
    }
}

在上面的示例中,我們對鍵“ all:users”進行排序。 第一次嘗試時,似乎沒有正確排序,因為默認排序考慮了數字。 在第二個示例中,我們使用ALPHA修飾符。 我們可以通過使用重載版本的sort方法來做到這一點。 它接收SortingParams類的實例。 在這種情況下,我們看到用戶名已正確排序。

SORT命令的一個不錯的功能是我們可以使用外部值(其他鍵中的值)對列表進行排序。 在下面的示例中,我們將按用戶給出的提示數對all:users鍵進行排序。 可以使用“ BY”修飾符來完成,該修飾符接收要使用的鍵的模式。 讓我們看下面的例子:

package br.com.xicojunior.redistest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
public class SortTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        //[1] Sorting the usernames by the number of ideas
        System.out.println(jedis.sort("all:users", new SortingParams().by("user:*->num_ideas")));
        //[user4, ribeiro, francisco, junior]
        //[1] Sorting the usernames by the number of ideas DESC
        System.out.println(jedis.sort("all:users", new SortingParams().by("user:*->num_ideas").desc()));
    }
}

在第二個示例中,我們通過一個外部值對用戶名進行排序,在本例中,我們通過字段“ numideas”對用戶名進行排序。因為我們按哈希字段排序,所以使用了以下模式“ user:-> numideas”。使用這種模式,我們說要查找鍵“ user:”,其中“ ”將被列表中的值替換。由于是散列,因此我們需要通知該字段。我們使用模式“-> fieldname”來完成。如果我們按字符串鍵排序,則可以使用模式“ numideas ”,因為有一個鍵可以存儲每個用戶的想法數。

在第一個調用中,它檢索了值-將它們排序為ASC。我們還可以使用DESC修飾符告訴reRediso將其排序為DESC。對于Jedis,BY和DESC是SortingParams中的方法。當所有方法都返回實例時,我們可以鏈接所有調用,這使讀取代碼更容易。
使用SORT 命令,我們還可以從外部鍵檢索值,也可以從外部哈希檢索字段。我們可以使用GET修飾符進行此操作,并且可以多次使用。讓我們在下面看到此修飾符的一些示例:

package br.com.xicojunior.redistest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
public class SortTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        //[1] Sorting the usernames by the number of ideas and retrieving the user name
        System.out.println(jedis.sort("all:users", new SortingParams().by("user:*->num_ideas").get("user:*->name")));
        //[User 4, Ribeiro User, Francisco User, Junior User]
        //[2] Retrieving the name and email
        System.out.println(jedis.sort("all:users", new SortingParams().by("user:*->num_ideas").get("user:*->name","user:*->email")));
        //[User 4, user@user.com, Ribeiro User, ribeiro@ribeiro.com, Francisco User, francisco@francisco.com, Junior User, junior@junior.com]
        //[3] Retrieve the value of the key being sorted - Special pattern #
        System.out.println(jedis.sort("all:users", new SortingParams().by("user:*->num_ideas").get("user:*->name","user:*->email","#")));
        //[User 4, user@user.com, user4, Ribeiro User, ribeiro@ribeiro.com, ribeiro, Francisco User, francisco@francisco.com, francisco, Junior User, junior@junior.com, junior]
    }
}

在上面的代碼中,我們可以看到GET修飾符的使用。 為了返回一個散列字段,我們可以使用類似于在BY修飾符中使用的模式。 首先,我們只是返回名稱,但是正如我們所說的,我們可以多次使用GET。 在第二個中,我們從用戶那里檢索名稱和電子郵件。 我們還可以檢索使用特殊模式“#”排序的鍵的值。 GET方法接收一個變量,因此我們可以傳遞要從中檢索值的所有外部鍵。

我們可以做的另一件事是將排序結果存儲在一個鍵中。 在需要緩存排序結果的情況下很有用,我們可以為sort命令指定一個dest鍵。 結果將存儲為LIST。

package br.com.xicojunior.redistest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
public class SortTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        jedis.sort("all:users","dest_key1");
        System.out.println(jedis.lrange("dest_key1", 0, -1));
        //[ribeiro, francisco, junior, user4]
        jedis.sort("all:users", new SortingParams().alpha().desc(), "dest_key2");
        System.out.println(jedis.lrange("dest_key2", 0, -1));
        //[user4, ribeiro, junior, francisco]
    }
}

SORT命令的一個非常有用的功能是我們只能將其用于從相關鍵中獲取值。 有一個修飾符指示不對NOSORT進行排序:

package br.com.xicojunior.redistest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;
public class SortTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        System.out.println(jedis.sort("all:users", new SortingParams().get("user:*->name","user:*->email").nosort()));
        //[User 4, user@user.com, Ribeiro User, ribeiro@ribeiro.com, Francisco User, francisco@francisco.com, Junior User, junior@junior.com]
    }
}

這段代碼基本上為所有用戶檢索名稱和電子郵件。 如果我們不使用SORT命令,則至少需要兩個命令來執行相同的操作:

LRANGE all:users 0 -1 //TO get all usernames

然后為每個用戶名分別調用HMGET,如下所示:

HMGET user:junior name email //TO get the name and email from a user

我們可以在redis網站上找到命令文檔。

抽絲剝繭,細說架構那些事--優銳課

文章寫道這里,歡迎朋友點贊關注,如有不足之處,歡迎評論交流!

吐血整理系列 Redis與Jedis排序

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣汉县| 岱山县| 雅江县| 松阳县| 南通市| 报价| 德昌县| 马山县| 高阳县| 毕节市| 辉南县| 垫江县| 延吉市| 临西县| 桦川县| 南宁市| 望城县| 芦山县| 尼勒克县| 淄博市| 湘潭市| 阿图什市| 如东县| 建德市| 洪湖市| 夏邑县| 建瓯市| 依兰县| 和静县| 麦盖提县| 内江市| 北流市| 南汇区| 定结县| 宜章县| 太湖县| 天祝| 绥德县| 罗甸县| 平乡县| 东莞市|