Redis-集合(Set)基础

Redis集合包括Set(无序集合)和ZSet(有序集合),这里的Set实现相当于Java中的HashSet,它内部实现了一个特殊的字典,字典中所有的value都是一个值NULL。下面我们来熟悉下set的常用的命令

Set

>sadd name hello(integer)1>sadd name hello    #重复,不能插入(integer)0>sadd name i am ok(integer)3>smembers name"hello""i""am""ok">sismember name hello    #检测值是否存在(integer)1>scard name     #获取长度(integer)4>spop name    #获取第一个"hello"

ZSet

zset是一个有序集合,他有着java里的SortedSet和HashMap的特色,它是一个集合能保证内部value唯一,又有一个排序字段score来排序,他的内部结构实现了跳跃列表,俗称跳表,接下来会找个时间来解释zset中的跳表实现。一般来说我们使用zset最多的还是排名,比如直播里面的送礼物排名,粉丝个数排名等

下面我们来使用一些常用的命令

>zadd name 2 world(integer)1>zadd name 1 hello(integer)1>zrange name 0 -1    #按照score升序排列"hello""world">zrevrange name 0 -1    #按照score降序排列"world""hello">zcard name    #获取集合个数(integer)2>zscore name hello    #获取内部score1.0>zrem name world    #删除(integer)1

一般来说我们进行有序的列表进行搜索的时可以使用遍历整个列表,但是为了考虑性能我们使用二分法是最快的,但是列表需要随机插入和删除,这样数据是不适合这样做,那么我们尝试着使用链表,链表很好的支持随机插入和删除,但是链表又不能进行二分法快速查找,那么我们redis里面使用了一个叫跳跃列表的方式来实现zset,关于这方面的分享,我会下后面的章节里详细描述。

一名正在抢救的coder

笔名:mangolove

CSDN地址:https://blog.csdn.net/mango_love

GitHub地址:https://github.com/mangoloveYu

猜你喜欢

转载自blog.csdn.net/mango_love/article/details/106289755