理解 redis 中的 集合对象类型

这篇我们来看看Redis五大类型中的第四大类型:集合类型,集合类型还是蛮有意思的,第一个是因为它算是只使用key的Dictionary简易版,这样说来的话,它就比Dictionary节省很多内存消耗,第二个是因为它和C#中的HashSet是一个等同类型,废话不多说,先看redis手册,如下:

上面就是redis中的set类型使用到的所有方法,还是老话,常用的方法也就那么四个(CURD)。。。

一:常用方法

1. SAdd

这个方法毫无疑问,就是向集合里面添加数据,比如下面这样,我往fruits集合里面添加喜爱的水果。


127.0.0.1:6379> sadd fruits apple
(integer) 1
127.0.0.1:6379> sadd fruits banana
(integer) 1
127.0.0.1:6379> smembers fruits
1) "banana"
2) "apple"
127.0.0.1:6379>

上面这个sadd你也看到了,我往集合里面成功添加了两个元素,现在你可能不满足这么简单的添加,你或许想知道set这个集合在redis底层是使用什么来实现的,你可以用object encoding查看一下便知:


127.0.0.1:6379> object encoding fruits
"hashtable"
127.0.0.1:6379> 

看到了吧,底层是个 hashtable,现在闭上眼睛都能想到,肯定就是只用key的dictionary啦,对不对,如果你还有疑问的话,我还可以找到底层代码给你看,好不啦???

有没有看到dictAdd方法,而其中的第三个参数正好是Null。。。对应着 *val 形参,????????。。。然后我再带你看看dictAdd方法的定义。

好了,关于hashtable的实现理论,我在上一篇文章中也已经说过了,这里就不再赘叙了。

2. SPOP,SMEMBERS

既然元素进来了,总不能不出来吧,这里的第一个 SPOP:移除并返回集合中的一个随机元素,有一点奇怪的是,这种奇怪的方法其实在我们C#中的HashSet并没有好办法解决,就比如 这个随机 就有点烦人了,下面这是我能想到的方法。

刚才随便插了一句话,下面我们继续SAdd,再SPop出来。


127.0.0.1:6379> sadd fruits pear
(integer) 1
127.0.0.1:6379> sadd fruits grape
(integer) 1
127.0.0.1:6379> sadd fruits chestnut
(integer) 1
127.0.0.1:6379> smembers fruits
1) "grape"
2) "pear"
3) "banana"
4) "apple"
5) "chestnut"
127.0.0.1:6379> spop fruits
"apple"
127.0.0.1:6379> spop fruits
"chestnut"
127.0.0.1:6379> smembers fruits
1) "grape"
2) "pear"
3) "banana"
127.0.0.1:6379>

这个方法确实还是蛮好的,起码它是原子性操作,如果要我自己实现的话,起码还是要10行左右代码的。

3. SREM

既然说到了CURD,那怎么能少了D呢,它的功能定义就是:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略,下面我随便举个例子,删除fruits中的pear。


127.0.0.1:6379> smembers fruits
1) "grape"
2) "pear"
3) "banana"
127.0.0.1:6379> srem fruits pear
(integer) 1
127.0.0.1:6379> smembers fruits
1) "grape"
2) "banana"
127.0.0.1:6379>

好了,常用的操作就那么几个,是不是觉得好傻瓜哦。。。傻瓜就对了,方法是简单的,关键你需要了解这个方法底层是如何实现的,这样才能做到心里有数。

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

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

相关文章

算法题目——田忌赛马(POJ-2287)

POJ-2287 参考文章 #include<iostream> #include<vector>#include<algorithm> #include<cstring> using namespace std; bool comp(int x ,int y) {return x > y; } int main() {int n;int temp;//保存临时变量的 vector<int> vec;//用于保…

qint64转为qstring qt_Qt中Qstring,char,int,QByteArray之间到转换

11、各种数据类型的相互转换char * 与 const char *的转换char *ch1"hello11";const char *ch2"hello22";ch2 ch1;//不报错&#xff0c;但有警告ch1 (char *)ch2;char 转换为 QString其实方法有很多中&#xff0c;我用的是&#xff1a;char ab;QString s…

评估服务基础性能应该参考那些指标?

当谈到网络服务性能的时候&#xff0c;很多人都会采用一些单一性的指标数据作为性能参考&#xff0c;如支持多少在线&#xff0c;能跑到多少带宽等&#xff1b;实际上这些单一性的指标数据并不能反映服务的基础性能&#xff0c;毕竟应用场景是多样性的&#xff1b;那更好判断一…

算法题目——岛屿问题(POJ-1328)

POJ-1328 题目大意&#xff1a;在x轴上建立尽量少的雷达覆盖所有的岛屿。 Input&#xff1a;岛屿的数量n&#xff0c;雷达覆盖半径d.接下来的n行一行表示一个岛屿(x,y). Output:每个案例的雷达最少数目. 经典的区间选点&#xff01; 要搞清楚为什么排序&#xff0c;然后要明…

oracle symonym_Oracle的同义词(synonyms)

oracle的同义词总结&#xff1a;从字面上理解就是别名的意思&#xff0c;和视图的功能类似。就是一种映射关系。1.创建同义词语句&#xff1a;create public synonym table_name for user.table_name;其中第一个user_table和第二个user_table可以不一样。此外如果要创建一个远程…

简述C#中应用程序集的装载过程

了解程序集如何在C&#xff03;.NET中加载我们一直在处理库和NuGet软件包。不管是好是坏&#xff0c;高级.NET开发人员都需要了解.NET运行时如何加载程序集。这些库依赖于其他流行的库&#xff0c;并且有很多共享的依赖项。有了足够大的依赖关系网络&#xff0c;您最终将陷入冲…

vue 插入word模板 项目_10 分钟为你的 vue 项目编写代码文档

代码文档是软件开发使用和维护的必备资料,有了文档&#xff0c;开发和维护以及协作的效率将变得大大提升。tips&#xff1a;如果对 JSDoc 已经熟悉&#xff0c;可以直接跳到实战演练环节。什么是文档&#xff1f;软件文档或者源代码文档是指与软件系统及其软件工程过程有关联的…

python小游戏——21点

编写一副扑克牌和一个发牌函数,要求: (1) 创建一副扑克牌,不包含两个Joker,其它牌面每个四张,花色可以用任意特殊符号表示; (2) 按照21点的游戏规则,使用学过的数据类型来指定每张牌的点数,其中数字牌的点数与同数字大小,J、Q和K的点数为0.5,A的点数为1; (3) 发牌函…

Magicodes.IE 2.5版本发布

今天我们发布了2.5版本&#xff0c;这当然也离不开大家对Magicodes.IE的支持&#xff0c;今天我也是跟往常一样列举了该版本一些重要的更新内容。当然也要说一下&#xff0c;在这个版本中我们设计了全新的LOGO。Excel导出Excel导出支持HeaderRowIndex #164&#xff08;https://…

算法题目——最短路径问题(HDU—1007)

题目链接&#xff1a;HDU-1007 前序&#xff1a; 先看一维中的最短路径的计算方式 问题的简单描述&#xff1a;(题意) 在一个笛卡尔系中&#xff0c;n个点分布不一&#xff0c;在这N个点中&#xff0c;求出相距最短的两个点之间的距离 思路&#xff1a; 分治二分法 解题报告…

没有Kubernets,学习Docker还有用吗?

Docker容器化和Kubernetes容器编排&#xff0c;作为微服务和云原生的核心依赖&#xff0c;这几年已是大红大紫全民皆知。然而近日Kubernetes官方发布公告&#xff0c;宣布自 v1.20 起放弃对 Docker 的支持&#xff0c;惊呆了一众开发者。在这背后&#xff0c;究竟是人性的扭曲&…

oracle 查看函数被哪些触发器引用_oracle如何查看存储过程,存储函数,触发器的具体内容...

(1)set serveroutput on实现plsql developer 打印输出(2)如何查看存储过程&#xff0c;存储函数&#xff0c;触发器的内容查 user_sources表eg&#xff1a;查询GET_DEPT_SUMSAL这个存储函数的内容SQL> desc user_source名称 是否为空? 类型-------------------------------…

算法题目——二次函数三分求极值(HDU-3714)

题目链接&#xff1a;HDU-3714 题目描述&#xff1a; 对于N个二次函数&#xff0c;求每个二次函数的最小值中的最大值 思路&#xff1a; 使用三分法求极值&#xff08;递归调用&#xff09; 对于这种在指定区间里只有一个极值点的函数&#xff08;凸函数凹函数都可以&#xff…

怎样才能去掉图片锁定纵横比_1分钟批量统一Word中300张图片的大小!无需插件、代码,超级简单...

很多时候我们需要将在Word中插入很多张图片&#xff0c;插入完成之后&#xff0c;一般我们还要统一它们的大小&#xff0c;如果是少量的图片的话&#xff0c;我们可以一个一个选择&#xff0c;然后再进行设置。或者先设置好一张图片后&#xff0c;再通过【F4】键&#xff0c;进…

我国火力发电站的大脑用上了国产系统

近年来&#xff0c;我国核电、水电、风电、光伏产业发展迅速&#xff0c;但从发电总量来看&#xff0c;火电依然占据7成以上的发电比例。水电、风电、光伏等清洁能源受自然条件限制&#xff0c;只能成为火电的有效补充&#xff0c;而不可能取代火电。而福岛核事故、切尔诺贝利核…

require 动态加载_require,exports,module.exports和import,export,export default

我们前端在开发过程中经常会遇到导入导出功能&#xff0c;在导入时&#xff0c;有时候是require&#xff0c;有时候是import在导出时&#xff0c;有时候是exports&#xff0c;module.exports&#xff0c;有时候是export&#xff0c;export default今天我们对这些内容进行简单的…

Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

Newbe.Claptrap 0.4.4 发布&#xff0c;模型验证器上线。更新内容完全基于表达式树的模型验证器本版本&#xff0c;我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。我们罗列了与 FluentValidation 比较的情况&#xff1a;Build in ValidatorsFluentVali…

算法题目中经典问题(易错点)

算法题目中经典问题.易错点 (一).二维数组的传参问题1.方法一:形参为二维数组并给定第二维长度2.方法二:形参为指向数组的指针并给出数组长度3.二维数组定义为全局变量(二).多组测试控制台数据,输入到文件结束(三).进制转换中的小问题1.使用字符串来存储,每一位(四).结构体…

dotnet core 应用是如何跑起来的 通过AppHost理解运行过程

在 dotnet 的输出路径里面&#xff0c;可以看到有一个有趣的可执行文件&#xff0c;这个可执行文件是如何在框架发布和独立发布的时候&#xff0c;找到 dotnet 程序的运行时的&#xff0c;这个可执行文件里面包含了哪些内容在回答上面的问题之前&#xff0c;请大家尝试打开 C:\…

算法题目——整数划分(HRBUST-2004)

题目链接&#xff1a;HRBUST-2004 递归法: 1.当n1时&#xff0c;此时只有1种解{1}; 2.当m1时&#xff0c;此时也只有1种解{1,1,1, … 3.当n> m时&#xff0c;要分为最大数包含m和不包含m两种情况。 ●包含m:此时就是{mx1,2…}. 其中x1x23.… n-m, 就相当于求和为n-m,最…