Redis入门到精通(四),Redis的数据结构与操作指令(二)

一.Redis中常见的数据结构
        众所周知啊,Redis中有五大数据结构,分别是String,List,Set,ZSet和Hash。接下来我会简单介绍一下几中数据结构的操作指令和使用场景,各位看官如果有所收获的话点个赞在走咯。

        书接上回,上期介绍了Redis中的String和List的操作及使用场景,本期将会对剩下三种数据结构Set、ZSet和Hash进行操作和使用场景的介绍。

4.Set

4.1.Set数据结构

        Set是一个无序不重复的集合

        Set结构模拟图

keyvaluevaluevalue
namevictory0victory1victory2
age181920

4.2.Set设置值

sadd key value value  #将一个或者多个值放入名为key的集合中

sadd name victory0 victory1 victory2  #设置名为name的集合中的元素分别为victory0 victory1 victory2

sadd age 18 19 20  #设置名为age的集合中的元素分别为18 19 20

4.3.Set获取值

smembers key  #获取key对应的集合中所有元素

smembers name  #获取集合name中的所有元素

smembers age  #获取集合age中所有的元素


4.4.移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略

srem key member  #移除集合key中一个或者多个指定元素,不存在则跳过

srem name vic0  #移除name集合中值为vic0的元素

srem age 18  #移除age集合中值为18的元素

4.5.查询key对应的集合中有多少个元素

scard key  #返回集合key中存储的元素个数,如果key不存在,则返回 0。

scard name  #返回集合name中存储的元素个数

scard age  #返回集合age中存储的元素个数
 

 4.6.返回一个集合与给定集合的差集的元素

sdiff key1 key2  #返回key1集合里不在key2集合中的元素

有点抽象,简单画个图,画得不好大家将就看,不会画画的码农不是一个好厨子

4.7.判断key集合中是否存在member元素

sismember key member  

#判断成员 member 是否是集合 key的成员.

#如果集合key中有member元素,返回1

#如果集合key中没有member元素,或者集合key不存在,返回0

sismember name vic0  #判断names中是否包含 zs
 

5.ZSet

5.1.ZSet数据结构

        ZSet(sorted sets)在Set基础上增加了score代表value的排序值(score理解为刻痕,标记可能会更恰当一些),让set集合有了排序功能,zset的数据结构其实为hash+跳跃链表实现。这个栏目的最后计划出几期关于数据结构的详细分析并带大家去理解设计的思想以及相关源码的阅读,对进阶版感兴趣的兄弟们记得回来看哦

        ZSet结构模拟图

keyvalue(score)value(score)value(score)
namevic1(10)vic2(20)vic3(30)

5.2.ZSet设置值

zadd key score value  
#将value添加到key对应的有序集合(sorted set)里面,并指定sorce,
#如果value已经存在,则会更新这个value的score更新到正确的排序位置

zadd name 10 vic1  
#添加元素vic1到key为name的有序集合中,并指定元素vic1的score为10

zadd name 20 vic2 30 vic3  
#添加元素vic2,vic3到key为name的有序集合中,指定元素score分别为20和30

5.3.查询集合中元素个数

zcard key  #查询key对应集合中的元素个数,如果集合不存在则返回0

zcard name  #查询name集合中的元素个数

5.4.查询集合中排序值范围内的元素个数

zcount key min max  
#返回key对应的集合中,
#score值在min和max之间(默认包括score值等于min或max)的元素。

zcount name 20 30  #获取name集合中score为20到30的元素个数。

5.5查询集合中索引范围内的元素(和排序值)

        此处查询是索引位置

zrange key start stop [withscores]
#返回集合key中的指定索引范围的元素。 
#返回的元素按排序值从低到高排列。 
#如果排序值相同,将按字典排序。
#返回给定索引范围内的元素列表(如果指定了withscore,将同时返回它们的排序值)。

zrange name 0 1 #返回name集合中索引位置0到1的元素

zrange name 0 -1 withscores  #返回name集合中所有的元素和其排序值

5.6.查询集合中元素从小到大排列的索引位置

zrank key member  
#返回有序集key中成员member的排名。
#其中有序集成员按score值递增(从小到大)顺序排列。

zrank name vic2  #返回vic2在name的排序值从小到大排名

 5.7.查询集合中元素从大到小排列的索引位置

zrevrank key member
#返回有序集key中成员member的排名。
#其中有序集成员按score值递增(从小到大)顺序排列。

zreverank name vic1  #返回vic1在name的排序值从大到小排名

5.8.删除并返回 

zpopmax key [count]
#删除并返回有序集合key中的最多count个具有最高排序值的成员。如未指定,count的默认值为1。

zpopmin key [count]
#删除并返回有序集合key中的最多count个具有最低排序值的成员。如未指定,count的默认值为1。

zpopmax name 2  #删除name集合中最高排序值的前2个元素

zpopmin name 2  #删除name集合中最低排序值的前2个元素

 5.9.查询元素对应的排序值

zscore key member  
#返回集合key中,元素member的score值。
#如果key集合中不存在member元素,或key不存在,返回nil。

zscore name vic1  #返回vic1的排序值

5.10.查询索引区间内的值并排序

zrevrange key start stop [WITHSCORES]
#返回集合key中,指定索引区间内的元素。
#元素按score值递减(从大到小)来排列。
#相同score值的成员按字典序的反序排列。

zrevrange name 1 2 WITHSCORES  #返回索引1-2的元素,按排序值大到小排序

5.11.根据排序值升序并进行区间查找

zrangebyscore key min max WITHSCORES
#返回集合中指定排序值区间内的成员,排序值由低到高排序

ZRANGEBYSCORE name 0 20 withscores
#查询name集合中排序值在0-20之间的元素,低到高排序

5.12.根据排序值降序并进行区间查找(附分页查询)

zrevrangebyscore key max min WITHSCORES LIMIT offset count
#返回集合中指定排序值区间内的成员,排序值由高到低排序,LIMIT分页,offset开始,展示count条

ZREVRANGEBYSCORE name 20 0 withscores limit 0 10    
#查询name集合中排序值在0-20之间的元素,由低到高排序
#第0条开始查询,查询10条

 

6.Hash

6.1.hash数据结构

        Redis里的Hash类似于JDK中的Map,一个大KEY下面以键值对的方式存储数据

        Hash结构模拟图

HASH KEYVALUE
PROGRAMMERfield(key)value
namevictory
age18

6.2.Hash结构存值

hset key field value
#设置 key 指定的哈希集合中指定字段的值。
#如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。
#如果字段在哈希集中存在,将被新值覆盖。

hset programmer name victory  #programmer这个hash中的name字段赋值为victory

6.3.Hash结构取值

hget key field  #获取hash对应的键值对中字段field的值

hget programmer name  #获取programmer中字段name对应的值

6.4.批量添加键值对到hash中

hmset key field value field value  #批量添加field=value键值对到key这个hash类型

hmset programmer name victory age 18  
#给programmer这个key设置name=victory键值对和age=18的键值对

6.5.批量取值

hmget key field field  #批量获取hash类型的键对应的值

hmget programmer name age   #获取programmer 中的name和age字段对应的值

6.6.查询所有的大KEY对应的field(key)

hkeys key  #返回哈希表 key 中的所有键

hkeys programmer  #返回programmer中的所有字段(小key)

6.7.查询所有大KEY对应的小value

hvals key  #返回哈希表 key 中的所有值

hvals programmer  #返回programmer中所有的值

6.8.查询所有大KEY对应的所有键和值

hgetall key  #返回哈希表key中,所有的键和值

hgetall programmer  #返回programmer中所有filed(key)和value

        关于Redis中的五大数据结构的操作就差不多介绍完啦,有机会的话会跟大家出一版进阶版的会对Redis中的数据结构从设计者的角度以及源码方面进一步跟大家进行介绍,下面几期会跟大家聊聊Redis的事务,发布订阅,持久化策略和淘汰策略的操作,以及我们的代码中该如何操作Redis。还望各位看官点个赞再走吧,给您劈个叉~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值