likes
comments
collection
share

Redis的数据结构之Set

作者站长头像
站长
· 阅读数 43

简介

Reids的set是集合类型,可以保存多个字符串元素,集合中的元素不能重复,并且集合中的元素也是无序的,无法通过下标来获取集合中的元素,这些特性与java的set非常类似。

数据结构

Redis的set底层使用了intset和hashtable两种数据结构存储的,其中intset可以理解为一种特殊的数组,而hashtable就是普通的哈希表。

Set的底层存储intset和hashtable存在编码转换,使用intset存储必须满足下面两个条件,否则使用hashtable,条件如下:

  • 1.结合对象保存的所有元素都是整数值
  • 2.集合对象保存的元素数量不超过512个

hashtable数据结构

hashtable的数据结构与上一章Hash中的结构基本一致,本章就不在重复说明。

intSet数据结构

Redis的数据结构之Set

说明:

  • encoding:contents保存的数据类型,默认类型为int16_t。
  • contents:实际内容数组
  • length:contents的元素数量

基础命令

Redis的数据结构之Set

sadd 添加元素

基本语法

sadd key value1...valuen

示例

Redis的数据结构之Set

scard 获取集合的成员数

基本语法

scard key

示例

Redis的数据结构之Set

sdiff 获取集合与集合的差集

基本语法

sdiff key1 key2

示例

Redis的数据结构之Set

sinter 获取集合与集合的交集

基本语法

sinter key1 key2

示例

Redis的数据结构之Set

sismember 判断member元素是否是集合key的成员

基本语法

sismember key member

示例

Redis的数据结构之Set

smembers 获取集合中的所有成员

基本语法

smembers key

示例

Redis的数据结构之Set

sunion 获取所有给定集合的并集

基本语法

sunion key1 key2

示例

Redis的数据结构之Set

srem 移除一个或多个元素

基本语法

srem key member

示例

Redis的数据结构之Set

sscan 迭代集合中元素

基本语法

sscan key cursor [match pattern] count

说明:

  • cursor:游标,从0开始
  • pattern :匹配模式
  • count:指定从数据集里返回多少元素,默认值为10.

示例

sscan mset 0 match j*

Redis的数据结构之Set

应用场景

  • 统计手机App每天的新增用户数

key以user:id 以及当天日期,例如 user:id:20200803; value为Set集合,记录当天登录的用户ID。

  • 博客共同好友

    通过set的获取多个集合的交集即可。

  • 网页UV的统计

统计用户每天访问网页的次数,一个用户一天内的多次访问只能算作一次。

注意事项

采用Set对于一些大集合进行相关的精确统计时,效率非常低,内存开销大,在生产环境尽量避免。

总结

本章讲解了Redis的数据结构Set,需要注意redis的set的聚合操作使用场景,如有疑问请随时反馈。

转载自:https://juejin.cn/post/7111714734843363342
评论
请登录