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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[渝粤教育] 西南科技大学 微机原理与应用 在线考试复习资料(1)

微机原理与应用——在线考试复习资料 一、单选题 1.十六进制数0A95转换成二进制数是? A.1010 1001 0101 B.0000 1010 0101 C.1000 1010 1001 D.0000 1110 1001 2.设BX2000H,[0003H]16H,[2000H]25H,[2003H]74H,执行指令MOV BX,2000H和指令MOV AL,[BX03H]后,AL中的数据是? A.7…

计算机发送到桌面快捷方式,windows7添加到桌面快捷方式无故消失!

您好&#xff0c;Windows 7设计者在Windows 7中所添加的设计。在默认情况下&#xff0c;只要System Maintenance troubleshooter(系统故障维护&#xff0c;以下简称SMT)检测到桌面的快捷方式已经无效了&#xff0c;将会自动将其删除。每周&#xff0c;SMT(系统故障维护)都会对操…

[渝粤教育] 西南科技大学 政府经济学 在线考试复习资料

政府经济学——在线考试复习资料 一、单选题 1.最优多数规则的优点在于( )。 A.保护每个人的平等权利 B.降低决策成本及保护少数 C.便于投票者实现利益交换 D.保护利益集团 2.不列入预算的国家财政支出称为( ) A.预算外支出 B.预算支出 C.国防支出 D.购买性支出 3.下列各组公…

Java:汇总堆外数据

探索如何以最小的垃圾收集影响和最大的内存利用率创建堆​​外聚合。 使用Java Map&#xff0c;List和Object创建大型聚合通常会产生大量堆内存开销。 这也意味着&#xff0c;一旦聚合超出范围&#xff0c;垃圾收集器将必须清理这些对象。 阅读这篇简短的文章&#xff0c;了解…

[渝粤教育] 西南科技大学 施工组织 在线考试复习资料

施工组织——在线考试复习资料 一、单选题 1.在双代号时标网络计划中,其关键线路是( )。 A.自始至终没有虚工作的线路 B.自始至终没有波形线的线路 C.既无虚工作,又无波形线的线路 D.所需资源最多的工作构成的线路 2.施工现场的道路干线应采用( )布置。 A.一字形 B.U形 C.环形…

计算机房英语单词,主机房是什么意思

1. 介绍了冷热源的选择及空调风系统、水系统、自控系统设计及主机房采取的安全措施&#xff0c;并做了几点设计总结。Presents the selection of cold and heat sources and design of the air system, water system, control system and the safety measures for main equipme…

[渝粤教育] 西南科技大学 材料力学 在线考试复习资料(1)

材料力学——在线考试复习资料 一、单选题 1.对于静定结构,若改变杆件横截面的尺寸,则 。 A.内力不变,位移不变 B.内力改变,位移不变 C.内力不变,位移改变 D.内力改变,位移改变 2.叠加原理用于求解静定结构时,需要满足的条件是 。 A.材料是理想弹性的 B.位移是微…

[渝粤教育] 西南科技大学 现代企业管理 在线考试复习资料

现代企业管理——在线考试复习资料 一、单选题 1.在企业科学管理阶段,泰勒提出的思想是( ) A.人群关系理论 B.需求层次理论 C.科学管理理论 D.双因素理论 2.产品发展期的主要特点是( ) A.销量迅速增加 B.企业利润增长慢 C.成本高、亏损严重 D.需要对产品的进退进行认真选择 3…

html引入latex,如何在html文件中使用MathJax或LaTex?

我无法让它工作&#xff0c;我不确定我做错了什么。我已经下载了MathJax.js&#xff0c;创建了一个html文件&#xff0c;并将其与js文件相关联。我甚至在此处复制并粘贴了之前已回答的问题&#xff0c;只是将vpn(vpn也没有工作&#xff0c;但问题和响应超过三年)的链接更改为我…

java中属性外部化_用Java可外部化

java中属性外部化在理解Externalizable接口之前&#xff0c;您需要了解序列化。您可以在java中的序列化上阅读有关序列化的更多信息。 Java提供了一种称为序列化的机制&#xff0c;以按字节的有序或字节序列的形式持久化Java对象&#xff0c;其中包括对象的数据以及有关对象的…

[渝粤教育] 西南科技大学 电子设计EDA 在线考试复习资料

电子设计EDA——在线考试复习资料 一、单选题 1. 执行菜单命令( ),用户可以选定某个元件,使程序只对与该元件相连的网络进行自动布线。 A.uto Routing/All B.uto Routing/Net C.uto Routing/Connection D.uto Routing/Component 2.对选中元件进行逆时针旋转,可以按( )。 A…

[渝粤教育] 西南科技大学 管理信息系统 在线考试复习资料(1)

管理信息系统——在线考试复习资料 一、单选题 1.系统转换是在( ) A.系统分析阶段 B.系统设计阶段 C.系统实施阶段 D.系统规划阶段 2.系统设计包括多项内容,下述哪一项是系统设计最基础性的工作?( ) A.代码设计 B.屏幕设计 C.输入设计 D.输出设计 3.用决策树描述处理逻辑是在…

在您的Maven-Fu包中增加了一些东西

Apache Maven很简单&#xff0c;但是功能非常强大。 使用一些技巧&#xff0c;您可以大大简化和优化您的开发经验。 处理多个非托管模块 假设您有一个主项目A提供了两个实用程序模块foo和bar &#xff0c;另一个项目B A了foo和bar 。 在使用B &#xff0c;您意识到需要偶尔对…

计算机网络的权威杂志,科学网—晒个自己整理的计算机网络和通信方向可能相关的期刊列表...

晒个自己整理的计算机网络和通信方向可能相关的期刊列表已有 3051 次阅读2010-1-14 13:42|个人分类:论文交流|系统分类:论文交流|关键词:网络&#xff0c;通信&#xff0c;国际期刊列表1 ACM的期刊列表 51.1. Communication of the ACM (http://cacm.acm.org/)1.2. NetWorker h…

[渝粤教育] 西南科技大学 经济法概论 在线考试复习资料2021版(3)

经济法概论——在线考试复习资料2021版 一、单选题 1.债务人放弃其到期债权,致使债务人无法清偿债权人的债权,债权人可以行使( )。 A.解除权 B.撤销权 C.代位权 D.抵消权 答案:看左边查询 2.在代位权诉讼中,债务人的诉讼地位是( )。 A.原告 B.被告 C.有独立请求权的第三人 D…

[渝粤教育] 西南科技大学 英语语法1 在线考试复习资料

英语语法1——在线考试复习资料 一、单选题 1.I was arguing with Cathy,Justin came in and took sides with her. A.when B.while C.the moment D.since 2.Though he is a five-year-old boy, helike a child. A.objects to be treated B.objects to being treated C.object…

ci 邮件 html模板,CI Email类发邮件

发邮件代码详情private function _send_mail($data) {//附件一&#xff0c;名称参数编码转换if(!empty($data[resume_name])){$file_name iconv(UTF-8,GB2312,$data[file_name]);}//附件二&#xff0c;名称参数编码转换if(!empty($data[resume_name])){$resume_name iconv(UT…

[渝粤教育] 西南科技大学 语文教材教法 在线考试复习资料2021版

语文教材教法——在线考试复习资料2021版 一、单选题 1.语文智育教育的内容包括哪些方面?阐述不正确的是: A.培养学术能力 B.培养记忆力 C.培养观察力 D.培养注意力 答案:看左边查询 2.考查与考试都不具有的功能:( ) A.评定功能 B.诊断功能 C.训练功能 D.反馈功能 答案:看…

[渝粤教育] 西南科技大学 钢结构 在线考试复习资料

钢结构——在线考试复习资料 一、单选题 1.屋盖支撑的主要作用是( )。 A.保证结构的空间刚度 B.增加屋架的侧向稳定 C.传递屋盖的水平荷载 D.便于屋盖的安全施工和A,B,C 2.钢结构实腹式压弯构件一般应进行的计算内容为( )。 A.强度、弯矩作用平面外的整体稳定性、局部稳定、…

账户与使用计算机的人无关,本地用户和组

本地用户和组用户账户的概述&#xff1a;用户账户是计算机的基本安全组件&#xff0c;计算机通过用户账户来辨别用户身份&#xff0c;让有使用权限的人登录计算机&#xff0c;访问本地计算机资源或从网络访问者台计算机的共享资源。Windows Server 2008 支持两种用户账户&#…