[list]
[*]集合类型的概念
[*]集合类型的底层实现
[*]集合类型的应用场景
[/list]
一、set是string类型的无序集合,无重复元素,底层是hashtable。对该集合可以取并集、交集、差集。(通过这些操作我们可以实现sns中的好友推荐)。set的最大长度是2^32-1.
二、底层实现
Redis 集合类型使用两种数据结构作为底层实现:
1. 整数集合
2. 字典
当集合对象保存的所有元素都是整数值且元素数量不超过512个时使用整数集合;不满足这个条件的集合对象使用 hashtable 编码。
当使用字典编码时,集合将元素保存到字典的键里面,而字典的值统一设为 NULL,下图展示了一个以字典编码表示的集合,集合成员为 elem1、elem2 和 elem3。
图解(引自极客学院玉不琢老师):
集合:
[img]http://dl2.iteye.com/upload/attachment/0113/4022/f7ac3b98-1eac-39a6-9adc-b90acb3b293f.jpg[/img]
底层存储模式:
[img]http://dl2.iteye.com/upload/attachment/0113/4020/aa812543-899a-30f9-a85b-8bbec9284050.png[/img]
[*]集合类型的概念
[*]集合类型的底层实现
[*]集合类型的应用场景
[/list]
一、set是string类型的无序集合,无重复元素,底层是hashtable。对该集合可以取并集、交集、差集。(通过这些操作我们可以实现sns中的好友推荐)。set的最大长度是2^32-1.
二、底层实现
Redis 集合类型使用两种数据结构作为底层实现:
1. 整数集合
2. 字典
当集合对象保存的所有元素都是整数值且元素数量不超过512个时使用整数集合;不满足这个条件的集合对象使用 hashtable 编码。
当使用字典编码时,集合将元素保存到字典的键里面,而字典的值统一设为 NULL,下图展示了一个以字典编码表示的集合,集合成员为 elem1、elem2 和 elem3。
图解(引自极客学院玉不琢老师):
集合:
[img]http://dl2.iteye.com/upload/attachment/0113/4022/f7ac3b98-1eac-39a6-9adc-b90acb3b293f.jpg[/img]
底层存储模式:
[img]http://dl2.iteye.com/upload/attachment/0113/4020/aa812543-899a-30f9-a85b-8bbec9284050.png[/img]