前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题43:介绍一下Redis中set类型的实现方式是什么?

面试题43:介绍一下Redis中set类型的实现方式是什么?

作者头像
爪哇缪斯
发布2023-05-09 21:43:16
1700
发布2023-05-09 21:43:16
举报
文章被收录于专栏:爪哇缪斯

【概述】

  • 适用场景: 存储有去重需求的数据;比如:针对一篇文章用户进行点赞操作。
  • 它的特点是内部元素无序且不重复。它的内部实现相当于一个特殊的字典,字典中所有的value指都为NULL。

【内部实现】

  • 集合对象的编码可以是intsethashtable

【intset】

  • intset编码集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。
代码语言:javascript
复制
127.0.0.1:6379> SADD number 1 2 3 4
(integer) 4
127.0.0.1:6379> OBJECT encoding number
"intset"
  • 数据结构如下:

【hashtable】

  • 字典作为底层实现,每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的值则全部被设置为NULL。
  • 数据结构如下:

【编码转换规则】

  • 当集合对象同时满足以下两个条件时,对象使用intset编码,否则使用hashtable编码:
    • 条件1:集合对象保存的所有元素都是整数值。
    • 条件2:集合对象保存的元素数量不超过512个。
  • 演示如下所示:
代码语言:javascript
复制
127.0.0.1:6379> SADD alphabet a b c d
(integer) 4
127.0.0.1:6379> OBJECT encoding alphabet
"hashtable"
127.0.0.1:6379> EVAL "for i=1, 512 do redis.call('SADD', KEYS[1], i) end" 1 bigset
(nil)
127.0.0.1:6379> SCARD bigset
(integer) 512
127.0.0.1:6379> OBJECT encoding bigset
"intset"
127.0.0.1:6379> SADD bigset 513
(integer) 1
127.0.0.1:6379> SCARD bigset
(integer) 513
127.0.0.1:6379> OBJECT encoding bigset
"hashtable"
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【概述】
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档