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 #获取内部score
1.0
>zrem name world #删除
(integer)1
一般来说我们进行有序的列表进行搜索的时可以使用遍历整个列表,但是为了考虑性能我们使用二分法是最快的,但是列表需要随机插入和删除,这样数据是不适合这样做,那么我们尝试着使用链表,链表很好的支持随机插入和删除,但是链表又不能进行二分法快速查找,那么我们redis里面使用了一个叫跳跃列表的方式来实现zset,关于这方面的分享,我会下后面的章节里详细描述。
一名正在抢救的coder
笔名:mangolove
CSDN地址:https://blog.csdn.net/mango_love
GitHub地址:https://github.com/mangoloveYu