百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

(Redis基础教程之八) 如何在Redis中管理Sets

mhr18 2024-11-13 11:09 34 浏览 0 评论

  1. 如何在ubuntu18.04上安装和保护redis
  2. 如何连接到Redis数据库
  3. 如何管理Redis数据库和Keys
  4. 如何在Redis中管理副本和客户端
  5. 如何在Redis中管理字符串
  6. 如何在Redis中管理list
  7. 如何在Redis中管理Hashes
  8. 如何在Redis中管理Sets
  9. 如何在Redis中管理Sorted Sets
  10. 如何在Redis中运行事务
  11. 如何使Redis中的Key失效
  12. 如何解决Redis中的问题
  13. 如何从命令行更改Redis的配置
  14. Redis数据类型简介

介绍

Redis是一个开源的内存中键值数据存储。设置在Redis的是储存在一个给定的钥匙串的Sets。当保存在一组中时,单个记录值称为_成员_。与列表不同,Sets是无序的,并且不允许重复的值。

本教程说明了如何创建Sets,检索和删除成员以及比较不同Sets的成员。

如何使用本指南

本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。

本指南中显示的命令已在运行Redis版本4.0.9的Ubuntu 18.04服务器上进行了测试。要设置类似的环境,您可以按照我们的指南如何在Ubuntu 18.04上安装和保护Redis的步骤1进行操作。我们将通过使用Redis命令行界面运行它们来演示这些命令的行为。请注意,如果您使用其他Redis界面(例如Redli),则某些命令的确切输出可能会有所不同。redis-cli

另外,您可以提供一个托管的Redis数据库实例来测试这些命令,但是请注意,根据数据库提供者所允许的控制级别,本指南中的某些命令可能无法按所述方式工作。要配置DigitalOcean托管数据库,请遵循我们的托管数据库产品文档。然后,您必须 安装Redli 设置TLS隧道才能通过TLS连接到托管数据库。

创建Sets

该sadd命令允许您创建一个Sets并向其中添加一个或多个成员。下面的例子将创建一组在一个名为键key_horror与成员"Frankenstein"和"Godzilla":

sadd key_horror "Frankenstein" "Godzilla"

如果成功,sadd将返回一个整数,显示它添加到Sets中的成员数量:

(integer) 2

如果您尝试将Sets的成员添加到已经持有非Sets值的键中,它将返回错误。在此块中的第一个命令创建一个列表命名的key_action一个元素,"Shaft"。下一条命令尝试将set成员添加"Shane"到列表中,但是由于数据类型冲突而产生错误:

rpush key_action "Shaft"
sadd key_action "Shane"


(error) WRONGTYPE Operation against a key holding the wrong kind of value

请注意,Sets不允许同一成员出现多次:

sadd key_comedy "It's" "A" "Mad" "Mad" "Mad" "Mad" "Mad" "World"


(integer) 4

即使此sadd命令指定了八个成员,它也会丢弃四个重复的"Mad"成员,从而将大小设置为4。

从Sets中检索成员

在本节中,我们将介绍一些Redis命令,这些命令返回有关Sets中持有的成员的信息。要练习此处概述的命令,请运行以下命令,这将创建一个由六个成员组成的Sets,该Sets的键为key_stooges:

sadd key_stooges "Moe" "Larry" "Curly" "Shemp" "Joe" "Curly Joe"

要从Sets中返回每个成员,请运行smembers命令,然后输入要检查的密钥:

smembers key_stooges


1) "Curly"
2) "Moe"
3) "Larry"
4) "Shemp"
5) "Curly Joe"
6) "Joe"

要检查特定值是否是Sets的成员,请使用以下sismember命令:

sismember key_stooges "Harpo"

如果元素"Harpo"是key_stoogesSets的成员,sismember则将返回1。否则,它将返回0:

(integer) 0

要查看给定Sets中有多少成员(换句话说,找到给定Sets的_基数_),请运行scard:

scard key_stooges


(integer) 6

要从Sets中返回随机元素,请运行srandmember:

srandmember key_stooges


"Larry"

要从Sets中返回多个随机,不同的元素,可以在srandmember命令后加上要检索的元素数量:

srandmember key_stooges 3


1) "Larry"
2) "Moe"
3) "Curly Joe"

如果您向传递一个负数srandmember,则该命令可以多次返回相同的元素:

srandmember key_stooges -3


1) "Shemp"
2) "Curly Joe"
3) "Curly Joe"

srandmember尽管所使用的随机元素函数的性能在较大的数据集中有所改善,但它并不是完全随机的。有关更多详细信息,请参见命令的官方文档。

从Sets中删除成员

Redis的带有用于从一组删除成员三个命令:spop,srem,和smove。

spop从中随机选择指定数量的成员并返回它们,类似于srandmember,但是从Sets中删除它们。它接受包含Sets的键名和要从Sets中删除的成员数作为参数。如果您未指定数字,spop则默认为返回并删除单个值。

以下示例命令将从key_stooges上一节创建的Sets中删除并返回两个随机选择的元素:

spop key_stooges 2


1) "Shemp"
2) "Larry"

srem 允许您从Sets中删除一个或多个特定成员,而不是随机成员:

srem key_stooges "Joe" "Curly Joe"

而不是返回从Sets中删除的成员,而是srem返回一个整数,显示已删除的成员数:

(integer) 2

使用smove一个成员从一组移动到另一个。此命令以该顺序接受源集,目标集和要移动的成员作为参数。请注意,一次smove只能移动一位成员:

smove key_stooges key_jambands "Moe"

如果命令成功移动了成员,它将返回(integer) 1:

(integer) 1

如果smove失败,它将返回(integer) 0。请注意,如果目标键尚不存在,请smove在将成员移入之前创建它。

比较集

Redis还提供了许多命令,可以找到Sets之间的差异和相似性。为了演示如何工作的,这部分将引用一个名为三套presidents,kings和beatles。如果您想亲自尝试本节中的命令,请创建这些Sets并使用以下sadd命令填充它们:

sadd presidents "George" "John" "Thomas" "James"
sadd kings "Edward" "Henry" "John" "James" "George"
sadd beatles "John" "George" "Paul" "Ringo"

sinter比较不同的Sets并返回_Sets相交_或出现在每个Sets中的值:

sinter presidents kings beatles


1) "John"
2) "George"

sinterstore执行类似的功能,但不是返回相交成员,而是在包含这些相交成员的指定目的地创建了一个新Sets。请注意,如果目的地已经存在,sinterstore将覆盖其内容:

sinterstore new_set presidents kings beatles
smembers new_set


1) "John"
2) "George"

sdiff返回Sets差异 —由以下每个Sets的第一个指定Sets的??差异得出的成员:

sdiff presidents kings beatles


1) "Thomas"

换句话说,sdiff查看第一个给定Sets中的每个成员,然后将其与每个连续Sets中的成员进行比较。第一组中也出现在以下组中的任何成员都将被删除,并sdiff返回其余成员。可以将其视为从第一组中删除后续组的成员。

sdiffstore执行与相似的功能sdiff,但不返回Sets差,而是在给定的目的地创建一个包含Sets差的新Sets:

sdiffstore new_set beatles kings presidents
smembers new_set


1) "Paul"
2) "Ringo"

像一样sinterstore,sdiffstore将覆盖目标键(如果已存在)。

sunion返回_Setsunion_或包含您指定的每个Sets的每个成员的Sets:

sunion presidents kings beatles


1) "Thomas"
2) "George"
3) "Paul"
4) "Henry"
5) "James"
6) "Edward"
7) "John"
8) "Ringo"

sunion 将结果视为新集,因为它只允许出现任何给定成员。

sunionstore 执行类似的功能,但是在给定的目的地创建一个包含Sets并集的新Sets,而不仅仅是返回结果:

sunionstore new_set presidents kings beatles


(integer) 8

与sinterstore和一样sdiffstore,sunionstore如果目标键已经存在,它将覆盖目标键。

结论

本指南详细介绍了用于在Redis中创建和管理集的许多命令。如果您想在本指南中概述其他相关的命令,参数或过程,请在下面的评论中提出疑问或提出建议。

有关Redis命令的更多信息,请参阅关于如何管理Redis数据库的系列教程。 作者:分布式编程 出处:https://zthinker.com/ 如果你喜欢本文,请长按二维码,关注 分布式编程 .

相关推荐

Team IDE 集成管理工具

Team·IDE工具简介TeamIDE工具集成SSH、FTP、MySql、Redis、Zookeeper、Kafka、Elasticsearch等管理工具Team·IDE功能模块目录结...

MySQL大数据表处理策略,原来一直都用错了……

场景当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题。数据的插入,查询时长较长后续业务需求的扩展,在表中新增字段,影响较大表中的数据并不是所有的都为有效数...

Java程序员你真的甘心只做增删改查吗

各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题最近...

Java后端开发除了增删改查还有什么?

后端的追求:接口稳定、架构合理、业务逻辑清晰、模块拆分合理、支持高并发等。软件本身归根到底都是由算法+数据结构构成的,进一步细化之后,其实就是通过一系列的增删改查操作,构成算法,对数据结构进行操作,赋...

基于shiro实现session持久化和分布式共享

前言本文写下session持久化和分布式共享基于shiro框架对session的管理机制来实现必要性一直处于登陆状态:你登陆微信不可能三天两头就让你重新登陆吧?而是一直处于登陆状态除非主动退出...

为啥工作那么多年,你还是只会增删改查?

你以为没有这样的感觉,工作中领导和同事都非常认可你的能力,但是你想更进一步,却不被认可。想出去看看,跳槽面试,却也是屡屡碰壁。面试的过程中,面试官问技术方案,明明心里很清楚,或者说印象还行,可就是说不...

Java程序员除了做增删改查还能干嘛?

就以Java后端开发为例,说说不同级别程序员干的事情。1初级开发,大概是有3年Java开发经验。22年底,上海,这批程序员如果学历是本科,薪资一般是8k到2w,当然如果能进好公司或互联网大厂,薪资能...

Java面试题及答案总结(2025版持续更新)

大家好,我是Java面试分享面对Java后端岗位的激烈竞争,掌握系统化的知识体系至关重要。本文整理了覆盖主流技术栈的高频面试题,助你高效备战,内容包含:Java基础、并发编程、Spring生态、数据库...

微服务架构之API网关——在微服务项目中的技术框架和用法实践

API网关技术实战在介绍了API网关的相关理论之后,大家可以了解到API网关的作用和优缺点,接下来将为大家介绍API网关在微服务项目中的技术框架和用法实践。Zuul网关其实API网关并不是很难的技术,...

带小白黑客入门,你也可以跟我们一起成为黑客大牛

小编这几天一直在做关于ssrf的实验,这篇文章可以带纯小白黑客入门。靶机ip地址:192.168.2.138查看靶机运行的redis服务。攻击机为ip192.168.2.112.用客户端redis-c...

Python最常见的170道面试题全解析答案(二)

60.请写一个Python逻辑,计算一个文件中的大写字母数量答:withopen(‘A.txt’)asfs:count=0foriinfs.read():ifi.isupper...

Spring Boot项目集成Redis,原来这么简单!

在现代软件开发的“快车道”上,SpringBoot无疑是许多开发者手中的“神兵利器”。它以其“约定大于配置”的理念,大大简化了Java应用的开发和部署过程,让开发者能够将更多精力聚焦于业务逻辑本身。...

Apache Commons Pool——优化你的java内存

大家好,我是吉森。我会持续分享一些开发技巧、经验和技术,如果你也热爱各种开发技术,欢迎关注我。今天我们继续介绍ApacheCommons工具包,今天的主角是:CommonsPool。简单地说,它是...

码农成长系列-基于WebSocket的后台消息提醒

场景描述当用户对app有某些业务操作时,需要将该操作友好地提醒给,有接收提醒权限的后台管理者。技术场景分析经分析,要实现上述业务,业务拆解后可能需要解决如下业务①.触发提醒待推送数据的监听②.提醒时接...

百度直播消息系统的实践和演进

导读:直播业务的核心功能有两个,一个是实时音视频推拉流,另一个是直播间消息流的收发。本文主要介绍百度直播服务内的消息服务系统的设计实践和演化。一、背景直播间内用户聊天互动,形式上是常见的IM消息流;...

取消回复欢迎 发表评论: