初识redis之常用Set和ZSet命令

Redis五种数据类型及操作命令详解
本文详细介绍了Redis的五种数据类型及其基本操作命令:String、Hash、List、Set、ZSet。着重解释了Set和ZSet的区别与用途,并提供了相应的命令示例,帮助读者快速掌握Redis数据结构的使用。

    redis五种数据类型:String,Hash,List,Set,ZSet。五种数据类型各有优点,各司其职。最后两种数据类型Set和ZSet基本上是一种,ZSet就是给Set加了个排序而已(相当于加了个属性)。

  Set是通过Hash表实现,增删改的查找复杂度都是O(1)。ZSet相当于Set的升级版本。

   下面直接上命令了:

  

 Set:无序集合,通过hash table实现,添加,删除,查找复杂度都是O(1)
   命令:
   sadd myset hello   向myset集合添加hello元素(不能重复,重复返回0)
   smembers myset   查看myset集合中所有元素
   srem  myset hello  删除myset中的hello元素
   spop myset    从myset中随机删除一个元素
   sdiff myset1 myset2   集合myset1和集合myset2的差集(1有而2没有的)
   sdiffstore myset3 myset1 myset2   将myset1和myset2的差集存入myset3
   sinter myset1 myset2   获取myset1和myset2的交集
   sinterstore myset3 myset1 myset2  将myset1和myset2的交集存入myset3
   sunion myset1 myset2 获取myset1和myset2的并集
   sunionstore myset3 myset1 myset2 将myset1和myset2的并集存入myset3
   smove myset1 myset2 jeyson   将jeyson元素从myset1移到myset2中
   scard myset1  获取myset1中元素个数
   sismember myset1 hello  测试hello是否是myset1的元素,是返回1 否则0
   srandmember myset1   随机返回myset1一个元素,但不删除
ZSet:有序集合,为Set的升级版本,增加了一个顺序属性
   命令:
  zadd myset 1 one   向myset集合添加顺序为1的元素one
     更新顺序也是这个命令  zadd myset 2 one  把one的顺序号改为2
  zrange myset 0 -1 withscores  获取集合中所有元素(带序号)
  zrevrange myset 0 -1 withscores  获取集合中所有元素(带序号)(降序)
  zrange myset 0 -1 获取集合中所有元素(不带序号)
  zrem myset one 删除集合中one元素
  zincrby myset 3 three  将three的顺序号增加3(如果没有three则创建three,顺序为3)
  zrank myset one 返回one的索引(不是顺序,索引从0开始)(升序后)
  zrevrank myset one 返回one的索引(从大到小)(降序后)
  zrangebyscore myset 2 5 withscores 获取顺序为2-5的元素
  zcount myset 2 5  返回集合中顺序在2-5的元素数量
  zcard myset  返回集合中所有元素个数
 zremrangebyrank  myset 2 5  删除指定索引区间内(2-5)的元素
 zremrangebyscore  myset 2 5  删除指定顺序区间内(2-5)的元素

Redis中list、setzset在多个方面存在区别: ### 数据特性 - **list**:是一个有序的字符串列表,可在列表两端进行元素的插入删除操作,元素可以重复。例如,使用`lpush``rpush`命令可分别从列表左侧右侧插入元素。 ```python # 示例命令 import redis r = redis.Redis() r.lpush('mylist', 'element1') r.rpush('mylist', 'element2') ``` - **set**:是无序的、唯一的字符串集合,自动去重。添加重复元素时,集合不会有任何变化。 ```python # 示例命令 r.sadd('myset', 'element1') r.sadd('myset', 'element1') # 重复元素,集合不会改变 ``` - **zset**:是有序集合,每个元素关联一个分数(score),根据分数对元素进行排序,元素也是唯一的。 ```python # 示例命令 r.zadd('myzset', {'element1': 1, 'element2': 2}) ``` ### 内部编码 - **list**:在Redis 6中,list的内部编码可以是`ziplist`或`linkedlist`,而Redis 7中是`listpack``linkedlist`。`ziplist`(Redis 7中的`listpack`)适用于元素较少且元素长度较短的情况,节省内存;`linkedlist`适用于元素较多的情况。 - **set**:当集合中的元素都是整数并且元素个数小于`set-max-intset-entries`配置(默认512个)时,Redis会选用`intset`来作为集合的内部实现,以减少内存的使用;否则使用`hashtable` [^3]。 ```python # 示例命令 r.sadd('myset', 1, 2, 3) # 可能使用intset编码 ``` - **zset**:在Redis 6中,zset有`ziplist``skiptable`两种编码格式,Redis 7是`listpack``skiptable`。当元素个数不超过`zset-max-ziplist-entries`(默认128)且单个元素大小不超过`zset-max-ziplist-value`(默认64byte)时,使用`ziplist`(Redis 7中的`listpack`);否则使用`skiptable` [^1][^4]。 ### 应用场景 - **list**:常用于消息队列、任务队列等场景,利用其可以在两端进行操作的特性实现先进先出(FIFO)或后进先出(LIFO)的队列。 - **set**:适用于去重、交集、并集、差集等操作的场景,如共同好友、推荐系统等。 ```python # 示例命令 r.sadd('set1', 'a', 'b', 'c') r.sadd('set2', 'b', 'c', 'd') common_friends = r.sinter('set1', 'set2') # 求交集 ``` - **zset**:适合需要根据某个分数进行排序的场景,如排行榜、热门列表等。 ```python # 示例命令 r.zadd('leaderboard', {'user1': 100, 'user2': 200}) top_users = r.zrevrange('leaderboard', 0, 1) # 获取前两名用户 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值