Redis基础用法(三)

简介
redis set对外提供的功与list类似,是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择。
redis的set是string类型的无序集合,他的底层实际是一个value为null的hash表,收益添加,删除,查找复杂度都是O(1)。
数据结构
set数据结构是字典,字典是用hash表实现的。
Java中的HashSet的内部实现使用HashMap,只不过所有的value都指向同一个对象。
Redis的set结构也是一样的,它的内部也使用hash结构,所有的value都指向同一个内部值。
常用命令
sadd:添加一个或多个元素
smembers:取出所有元素

127.0.0.1:6379> sadd k1 v1 v2 v1 v3 v2 #k1中放入5个元素,会自动去重,成功插入3(integer) 3
127.0.0.1:6379> smembers k1 
1) "v2" 
2) "v1" 
3) "v3"

sismember:判断集合中是否有某个值

127.0.0.1:6379> sadd k1 v1 v2 v1 v3 v2 #k1集合中成功放入3个元素[v1,v2,v3] 
(integer) 3 
127.0.0.1:6379> sismember k1 v1 #判断k1中是否包含v1,1:有 
(integer) 1 
127.0.0.1:6379> sismember k1 v5 #判断k1中是否包含v5,0:无 
(integer) 0

scard:返回集合中元素的个数

127.0.0.1:6379> sadd k1 v1 v2 v1 v3 v2 
(integer) 3 
127.0.0.1:6379> scard k1 
(integer) 3

srem:删除多个元素
移除集合 key 中的一个或多个 member 元素,不存在的 member 元=素会被忽略。
当 key 不是集合类型,返回一个错误。
返回值: 被成功移除的元素的数量,不包括被忽略的元素。

127.0.0.1:6379> sadd course java c c++ python #集合course中添加4个元素 
(integer) 4 
127.0.0.1:6379> smembers course #获取course集合所有元素 
1) "python" 
2) "java" 
3) "c++" 
4) "c" 
127.0.0.1:6379> srem course java c #删除course集合中的java和c 
(integer) 2 
127.0.0.1:6379> smembers course #获取course集合所有元素,剩下2个了 
1) "python" 
2) "c++"

spop:随机弹出多个值

随机从key集合中弹出count个元素,count默认值为1
返回值:
被移除的随机元素。
当 key 不存在或 key 是空集时,返回 nil

127.0.0.1:6379> sadd course java c c++ python #course集合中添加4个元素 
(integer) 4 
127.0.0.1:6379> smembers course #获取course集合中所有元素 
1) "python"
2) "java" 
3) "c++" 
4) "c" 
127.0.0.1:6379> spop course #随机弹出1个元素,被弹出的元素会被删除 
"c++" 
127.0.0.1:6379> spop course 2 #随机弹出2个元素 
1) "java" 
2) "python"

srandmember:随机获取多个元素,不会从集合中删除
从key指定的集合中随机返回count个元素,count可以不指定,默认值是1。
srandmember 和 spop的区别:
都可以随机获取多个元素,srandmember 不会删除元素,而spop会删除元素。
返回值:
只提供 key 参数时,返回一个元素;如果集合为空,返回 nil 。
如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。

127.0.0.1:6379> sadd course java c c++ python #course中放入5个元素 
(integer) 4 
127.0.0.1:6379> smembers course #输出course集合中所有元素 
1) "python" 
2) "java" 
3) "c++" 
4) "c" 
127.0.0.1:6379> srandmember course 3 #随机获取3个元素,元素并不会被删除 
1) "python" 
2) "c++" 
3) "c" 
127.0.0.1:6379> smembers course #输出course集合中所有元素,元素个数未变 
1) "python" 
2) "java" 
3) "c++" 
4) "c"

smove:将某个原创从一个集合移动到另一个集合

127.0.0.1:6379> sadd course1 java php js #集合course1中放入3个元素[java,php,js] 
(integer) 3 
127.0.0.1:6379> sadd course2 c c++ #集合course2中放入2个元素[c,c++] 
(integer) 2 
127.0.0.1:6379> smove course1 course2 js #将course1中的js移动到course2 
(integer) 1 
127.0.0.1:6379> smembers course1 #输出course1中的元素 
1) "java" 
2) "php" 
127.0.0.1:6379> smembers course2 #输出course2中的元素 
1) "js" 
2) "c++" 
3) "c"

sinter:取多个集合的交集

127.0.0.1:6379> sadd course1 java php js #集合course1:[java,php,js] 
(integer) 3 
127.0.0.1:6379> sadd course2 c c++ js #集合course2:[c,c++,js] 
(integer) 3 
127.0.0.1:6379> sadd course3 js html #集合course3:[js,html] 
(integer) 2 
127.0.0.1:6379> sinter course1 course2 course3 #返回三个集合的交集,只有:[js] 
1) "js"

sinterstore:将多个集合的交集放到一个新的集合中
这个命令类似于 sunion 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
返回值:
结果集中的成员数量。

127.0.0.1:6379> sadd course1 java php js #集合course1:[java,php,js] 
(integer) 3 
127.0.0.1:6379> sadd course2 c c++ js #集合course2:[c,c++,js] 
(integer) 3 
127.0.0.1:6379> sadd course3 js html #集合course3:[js,html] 
(integer) 2 
127.0.0.1:6379> sunion course1 course2 course3 #返回3个集合的并集,会自动去重 
1) "php" 
2) "js" 
3) "java" 
4) "html" 
5) "c++" 
6) "c"

sunionstore:将多个集合的并集放到一个新的集合中

这个命令类似于 sunion 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
返回值:
结果集中的成员数量。
sdiff:取多个集合的差集
返回一个集合的全部成员,该集合是所有给定集合之间的差集。不存在的 key 被视为空集。

127.0.0.1:6379> sadd course1 java php js #集合course1:[java,php,js] 
(integer) 3 
127.0.0.1:6379> sadd course2 c c++ js #集合course2:[c,c++,js] 
(integer) 3 
127.0.0.1:6379> sadd course3 js html #集合course3:[js,html] 
(integer) 2 
127.0.0.1:6379> sdiff course1 course2 course3 #返回course1中有的而course2和course3 中都没有的元素 
1) "java" 
2) "php"

sdiffstore:将多个集合的差集放到一个新的集合中
这个命令类似于 sdiff 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
返回值:
结果集中的成员数量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于学习Redis基础知识,可以按照以下思路进行学习: 1. 了解Redis的概念和特点:首先需要了解Redis是什么,它的主要特点是什么,它为什么被广泛应用于缓存、消息队列、会话管理等场景。 2. 安装和配置Redis:根据你的操作系统,安装Redis并进行相关配置。可以参考Redis官方文档或其他教程来完成这一步。 3. 学习Redis的数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。了解每种数据结构的特点、用途和操作命令,并通过实际操作来加深理解。 4. 掌握Redis的常用命令:学习Redis的常用命令,如get、set、hget、hset、lpush、lrange、sadd、smembers等,了解每个命令的具体用法和参数含义。 5. 理解Redis的持久化机制:了解Redis的RDB和AOF两种持久化方式,以及它们的优缺点。学习如何进行备份和恢复数据。 6. 学习Redis的事务和Lua脚本:了解Redis事务的基本概念和使用方法,以及如何使用Lua脚本来进行复杂的操作。 7. 深入了解Redis的性能优化和高可用方案:学习如何优化Redis的性能,包括配置调优、使用合适的数据结构、合理地使用缓存等。同时了解Redis的高可用方案,如主从复制、哨兵模式和集群模式。 8. 学习Redis与其他技术的结合:了解Redis如何与其他技术进行结合,如与Python、Java等编程语言的配合使用,以及与Spring、Django等框架的整合。 以上是学习Redis基础知识的一个思路,你可以根据自己的实际情况和需求进行学习和拓展。推荐参考一些经典的Redis教程和实战案例,通过实际操作和项目实践来提升自己的技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值