日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

jedis与redis_Redis与Jedis排序

發布時間:2023/12/3 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jedis与redis_Redis与Jedis排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jedis與redis

在本文中,我們將討論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 usernamesSystem.out.println(jedis.sort("all:users"));//[ribeiro, francisco, junior, user4]//[2]sorting the username alpha//jedis sort method receives a SortingParams instance for modifiersSystem.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 ideasSystem.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 DESCSystem.out.println(jedis.sort("all:users", new SortingParams().by("user:*->num_ideas").desc()));}}

在第二個示例中,我們通過一個外部值(在本例中為“ num_ideas ”)對用戶名進行排序。 在這種情況下,我們使用哈希模式進行排序,我們使用以下模式“ user:*-> num_ideas ”。 使用這種模式,我們要尋找鍵“ user:* ”,其中的“ *”將被列表中的值替換。 由于它是一個散列,因此我們需要通知該字段,因此我們使用模式“ -> fieldname ”進行操作。 如果我們按字符串鍵排序,則可以考慮使用一個鍵來存儲每個用戶的想法數量,因此可以使用以下模式“ num_ideas_ * ”。

在第一次調用它檢索排序ASC他們的價值觀,我們也可以告訴Redis的對它進行排序DESC使用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 nameSystem.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 emailSystem.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,接收一個vararg,因此我們可以傳遞要從中檢索值的所有外部鍵。

我們可以做的另一件事是將排序結果存儲在一個鍵中。 對于要緩存排序結果的情況很有用,我們可以為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站點中找到命令文檔。

參考:在XICO JUNIOR'S WEBLOG博客中,我們JCG合作伙伴 Francisco Ribeiro Junior的Jedis 與Redis進行了排序 。

翻譯自: https://www.javacodegeeks.com/2014/02/redis-sort-with-jedis.html

jedis與redis

總結

以上是生活随笔為你收集整理的jedis与redis_Redis与Jedis排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。