Set数据结构

  1. 使用 intset

    当同时满足下面两个条件时,使用 intset 存储数据

    • 元素个数少于512个 (set-max-intset-entries: 512)
    • 所有元素都是整数值
  2. 不满足上面的条件, 使用 hashtable

intset 图解

//intset 的编码方式
#define INTSET_ENC_INT16 (sizeof(int16_t))
#define INTSET_ENC_INT32 (sizeof(int32_t))
#define INTSET_ENC_INT64 (sizeof(int64_t)) typedef struct intset {
uint32_t encoding; // 编码方式
uint32_t length; // 集合包含的元素数量
int8_t contents[]; // 保存元素的数组
} intset;

可以看到 intset 很简单, 基本和普通数组差不多

另外, 当使用 intset 编码时,数据是有序的。

intset 演示:

127.0.0.1:6379> SADD nums 5 8 1 9 0
(integer) 5
127.0.0.1:6379> OBJECT ENCODING nums
"intset"
127.0.0.1:6379> SMEMBERS nums
1) "0"
2) "1"
3) "5"
4) "8"
5) "9"

hashtable 图解

  • 请参阅我之前的文章 Redis 原理 - Hash
  • 当使用 hashtable 编码时,数据是无序的。

hashtable 演示:

127.0.0.1:6379> SADD data a b c d e f
(integer) 6
127.0.0.1:6379> OBJECT ENCODING data
"hashtable"
127.0.0.1:6379> SMEMBERS data
1) "c"
2) "b"
3) "a"
4) "e"
5) "d"
6) "f"

Set常用的命令

  • SADD key member 向set中添加一个或多个元素
  • SREM key member 移除set中的指定元素
  • SCARD key 返回set中元素的个数
  • SMEMBERS key 获取一个set中的所有成员
  • SISMEMBER key member 判断一个元素是否在set中
  • SINTER key1 key2 ... 取多个set的交集

Redis 原理 - Set的更多相关文章

  1. Redis原理与实践总结

    Redis原理与实践总结 本文主要对Redis的设计和实现原理做了一个介绍很总结,有些东西我也介绍的不是很详细准确,尽量在自己的理解范围内把一些知识点和关键性技术做一个描述.如有错误,还望见谅,欢迎指 ...

  2. Redis原理篇

    Redis原理篇 1.发布 订阅模式 1.1列表 的局限 ​ 前面我们说通过队列的 rpush 和 lpop 可以实现消息队列(队尾进队头出),但是消费者需要不停地调用 lpop 查看 List 中是 ...

  3. Redis 系列(04-2)Redis原理 - 内存回收

    目录 Redis 系列(04-2)Redis原理 - 内存回收 Redis 系列目录 1. 过期策略 1.1 定时过期(主动淘汰) 1.2 惰性过期(被动淘汰) 1.3 定期过期 2. 淘汰策略 2. ...

  4. Redis原理详解

    Redis原理详解 数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redi ...

  5. 面试被吊打系列 - Redis原理

    小张兴冲冲去面试,结果被面试官吊打! 小张: 面试官,你好.我是来参加面试的. 面试官: 你好,小张.我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧.首先我的问题是,R ...

  6. redis原理分析

    基本全是参考http://blog.csdn.net/a600423444/article/details/8944601     redis的使用大家都很熟悉,可能除了watch 锁,pipelin ...

  7. Redis原理及使用

    一:原理介绍 1:什么是redis?  Redis 是一个基于内存的高性能key-value数据库. 2:Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcache ...

  8. Redis详细讲解(Redis原理,Redis安装,Redis配置,Redis使用,Redis命令)

    一.Redis介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发 ...

  9. redis原理及实现

    1 什么是redis redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在内存中) 使用java对redis进行操作类似jdbc接口标准对mysql,有各类实现他 ...

  10. Redis原理及集群相关知识

    读书笔记 <Redis开发与运维 > Redis使用场景 作为缓存层 减少对Mysql的压力 计数功能 比如使用原子命令incr 共享Session 设置过期时间 可以限制短信接口等调用 ...

随机推荐

  1. C#HTTP网络请求时GetResponseAsync()方法抛出“远程服务器返回错误: (411) 所需的长度”异常

    在请求HttpWebRequest的报了如下的错误"远程服务器返回错误: (411) 所需的长度",结果网上 百度了一下说,再请求POST的时候,若没有参数的情况下,需要将进行如下 ...

  2. 网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1

    本文由萤火架构分享,原题"localhost和127.0.0.1的区别是什么?",原文链接"juejin.cn/post/7321049446443417638" ...

  3. springboot-权限控制shiro

    1. 场景描述 (1)权限控制是IT项目特别是企业项目,绕不开的重要模块,接下来结合springboot介绍下权限控制框架shiro. (2)springboot集成shiro的东西有点多,一篇博客完 ...

  4. centos8网络配置问题

    由于RHEL8与centos8基本一样,所以以下方法同样适用于RHEL8 在centos8上进行网络配置时,出现以下问题: 意思是无法找到network.service 出现错误的原因是centos8 ...

  5. linux:项目上线

    服务器选择 项目上线服务器必须是外网服务器 真实服务器 成本过高.多用于测试 云服务器 阿里云.腾讯云.百度云.华为云.盛大云.新浪云.亚马逊云等 官网:阿里云 1.注册/登录后 2.支付成功即可![ ...

  6. linux:配置NTP

    介绍 网络时间协议(Network Time Protocol,NTP),用于同步网络中各个计算机的时间的协议.其用途是将计算机的时钟同步到世界协调时 UTC. ntpd(Network Time P ...

  7. VuePress 博客搭建系列 33 篇正式完结!

    前言 VuePress 博客搭建系列是我写的第 6 个系列文章,前 5 个系列分别是 JavaScript 深入系列,JavaScript 专题系列.underscore 系列.ES6 系列.Type ...

  8. SDN网络技术在云计算中的应用

    本文分享自天翼云开发者社区<SDN网络技术在云计算中的应用>,作者:1****m SDN(软件定义网络)是一种新型的网络架构,其基本思想是将数据平面和控制平面分离,通过集中式的控制器来管理 ...

  9. 云电脑:DPU简介及分析

    本文分享自天翼云开发者社区<云电脑:DPU简介及分析>,作者:大利 随着云计算技术的快速发展,云电脑作为一种基于云计算技术的虚拟化电脑,正在逐渐受到广泛关注.然而,云电脑在实现过程中面临着 ...

  10. 使用yarn安装依赖包出现“There appears to be trouble with your network connection. Retrying...”超时的提醒

    我们在使用yarn安装依赖包文件的时候,可能会出现"There appears to be trouble with your network connection. Retrying... ...