(Redis基础教程之八) 如何在Redis中管理Sets
- 如何在ubuntu18.04上安装和保护redis
- 如何连接到Redis数据库
- 如何管理Redis数据库和Keys
- 如何在Redis中管理副本和客户端
- 如何在Redis中管理字符串
- 如何在Redis中管理list
- 如何在Redis中管理Hashes
- 如何在Redis中管理Sets
- 如何在Redis中管理Sorted Sets
- 如何在Redis中运行事务
- 如何使Redis中的Key失效
- 如何解决Redis中的问题
- 如何从命令行更改Redis的配置
- 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/
如果你喜欢本文,请长按二维码,关注 分布式编程
.
(Redis基础教程之八) 如何在Redis中管理Sets的更多相关文章
- (Redis基础教程之六)如何使用Redis中的List
如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...
- mongodb,Mysql,redis基础教程
数据库基础 1:mongodb基础教程 1:pymongo基础教程 2:Mysql基础教程 3:redis基础教程
- 160803、如何在ES6中管理类的私有数据
如何在ES6中管理类的私有数据?本文为你介绍四种方法: 在类的构造函数作用域中处理私有数据成员 遵照命名约定(例如前置下划线)标记私有属性 将私有数据保存在WeakMap中 使用Symbol作为私有属 ...
- Electron-vue实战(三)— 如何在Vuex中管理Mock数据
Electron-vue实战(三)— 如何在Vuex中管理Mock数据 作者:狐狸家的鱼 本文链接:Vuex管理Mock数据 GitHub:sueRimn 在vuex中管理mock数据 关于vuex的 ...
- NewLife.Redis基础教程
X组件缓存架构以ICache接口为核心,包括MemoryCache.Redis和DbCache实现,支持FX和netstandard2.0!后续例程与使用说明均以Redis为例,各缓存实现类似. Re ...
- Redis入门教程(三)— Java中操作Redis
在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...
- Redis基础教程
说明:本文中涉及的代码是c#所写,连接redis的第三方驱动为ServiceStack.Redis.连接redis的客户端软件为redis-desktop-manager. 一.Redis是什么 Re ...
- (Python基础教程之八)Python中的list操作
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- Spring Boot 2.x基础教程:找回启动日志中的请求路径列表
如果您看过之前的Spring Boot 1.x教程,或者自己原本就对Spring Boot有一些经验,或者对Spring MVC很熟悉.那么对于Spring构建的Web应用在启动的时候,都会输出当前应 ...
- (Python基础教程之十三)Python中使用httplib2 – HTTP GET和POST示例
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
随机推荐
- 【Homebrew】之相关命令问题合集及iOS真机调试包
一.Homebrew更换国内镜像源(中科大.阿里.清华) Homebrew主要有四个部分组成: brew.homebrew-core .homebrew-bottles.homebrew-cask. ...
- Zeppelin 学习
Zeppelin 遇到的问题: 1. 在interpreter 界面配置 dependency management 了以后,报 Error setting properties for interp ...
- LeetCode 二叉树的最近公共祖先
一.二叉搜索树的最近公共祖先 利用二叉搜索树的性质,祖先的两个孩子,左孩子的小于根节点的值,右孩子大于根节点的值. 如果根节点的值,同时大于p的值和q的值,那么在左子树找根节点: 如果根节点的值,同时 ...
- argmax经过sigmoid和不经过sigmoid区别
起因 今天和同组讨论了一下网络输出时,在torch.argmax之前经过torch.sigmoid和不经过sigmoid的区别. 主要起因是实验结果图像不同 图1 不经过sigmoid 图2 经过si ...
- 在Vue3中如何实现四种全局状态数据的统一管理?
四种全局状态数据 在实际开发当中,会遇到四种全局状态数据:异步数据(一般来自服务端).同步数据.同步数据又分为三种:localstorage.cookie.内存.在传统的 Vue3 当中,分别采用不同 ...
- 57.dom递归退出循环的时机
递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return:返回终止递归. 终止的条件: 1.判断递归的次数是否达到某一限定值 2.判断运算 ...
- SQL注入利用及绕过总结
SQL注入及绕过姿势总结 概述 SQL注入指用户输入的参数可控且没有被过滤,攻击者输入的恶意代码被传到后端与SQL语句一起构造并在数据库中执行 不同数据库的语法可能存在差异,以MySQL为例,其他差异 ...
- 使用 KubeKey 在 AWS 高可用部署 Kubernetes
作者:李耀宗 介绍 对于生产环境,我们需要考虑 Kubernetes 集群的高可用性.本文教您部署如何在多台 AWS EC2 实例快速部署一套高可用的生产环境.要满足 Kubernetes 集群服务需 ...
- 云原生爱好者周刊:利用 DNS 计算圆周率
开源项目推荐 dns.toys dns.toys 是一个比较有创意的 DNS 服务器,它利用 DNS 协议提供了很多非常有趣的功能和服务.例如查询时间.天气.圆周率.单位换算等等. Submarine ...
- 利用 Kubernetes 内置 PodTemplate 管理 Jenkins 构建节点
作者:Rick Jenkins 可以很好地与 Kubernetes 集成,不管是控制器(controller)还是构建节点(agent),都能以 Pod 的形式运行在 Kubernetes 上. 熟悉 ...