当前位置: 首页 > news >正文

chatgpt入口优化营商环境工作开展情况汇报

chatgpt入口,优化营商环境工作开展情况汇报,外贸公司网站怎么设计更好,百度在线Set 类型是一个无序并唯一的键值集合#xff0c;它的存储顺序不会按照插入的先后顺序进行存储。Redis 中集合是通过哈希表实现的#xff0c;所以添加#xff0c;删除#xff0c;查找的复杂度都是 O(1)。相对于列表#xff0c;集合也有两个特点#xff1a;无序、不可重复 … Set 类型是一个无序并唯一的键值集合它的存储顺序不会按照插入的先后顺序进行存储。Redis 中集合是通过哈希表实现的所以添加删除查找的复杂度都是 O(1)。相对于列表集合也有两个特点无序、不可重复 一个集合最多可以存储 2^32-1 个元素。概念和数学中个的集合基本类似数学集合的概念是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。 简而言之Redis 集合就是一些不重复值的组合。利用集合Set这个数据结构Redis 可以存储一些集合类型的数据Redis也通过一些简便的命令很好的支持了交集、并集和差集等集合的基本运算。 文章目录 [toc]1、Set数据类型1.1、Set类型简介1.2、Set应用场景 2、Set底层结构2.1、List底层结构介绍2.2、整数集合IntSet2.3、哈希表HashTable 3、Set常用命令3.1、添加集合元素3.2、查看集合所有值3.3、判断一个值是否在集合中3.4、查看某集合的存值的数量3.5、删除集合中指定值的元素3.6、随机选出某集合中一个元素3.7、随机删除某集合中一个元素3.8、将一个集合中的某值移动至另一个集合3.9、集合运算差集3.10、集合运算交集3.11、集合运算并集 1、Set数据类型 1.1、Set类型简介 Set 类型是一个无序并唯一的键值集合它的存储顺序不会按照插入的先后顺序进行存储。Redis 中集合是通过哈希表实现的所以添加删除查找的复杂度都是 O(1)。相对于列表集合也有两个特点无序、不可重复 一个集合最多可以存储 2^32-1 个元素。概念和数学中个的集合基本类似数学集合的概念是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。 简而言之Redis 集合就是一些不重复值的组合。利用集合Set这个数据结构Redis 可以存储一些集合类型的数据Redis也通过一些简便的命令很好的支持了交集、并集和差集等集合的基本运算。 1.2、Set应用场景 常见的应用场景有投票系统、标签系统、共同好友、共同关注、共同爱好、抽奖、商品筛选栏访问 IP 统计等 使用场景 点赞、踩、收藏Set 类型可以保证一个用户只能点一个赞共同关注、标签Set 类型支持交集运算所以可以用来计算共同关注的好友、公众号等抽奖活动存储某活动中中奖的用户名 Set 类型因为有去重功能可以保证同一个用户不会中奖两次 2、Set底层结构 2.1、List底层结构介绍 Redis Set 的底层存储采用 整数集合 IntSet 和哈希表二者是相互转换的使用 IntSet 存储必须满足下面两个条件否则使用 HashTable条件如下 结合对象保存的所有元素都是整数值集合对象保存的元素数量不超过 512 个 以 Set 的 SADD 命令为例子整个添加过程如下 检查 Set 是否存在不存在则创建一个 Set 结合。根据传入的 Set 集合一个个进行添加添加的时候需要进行内存压缩。setTypeAdd 执行 Set 添加过程中会判断是否进行编码转换 void saddCommand(redisClient *c) {robj *set;int j, added 0;// 取出集合对象set lookupKeyWrite(c-db,c-argv[1]);// 对象不存在创建一个新的并将它关联到数据库if (set NULL) {set setTypeCreate(c-argv[2]);dbAdd(c-db,c-argv[1],set);// 对象存在检查类型} else {if (set-type ! REDIS_SET) {addReply(c,shared.wrongtypeerr);return;}}// 将所有输入元素添加到集合中for (j 2; j c-argc; j) {c-argv[j] tryObjectEncoding(c-argv[j]);// 只有元素未存在于集合时才算一次成功添加if (setTypeAdd(set,c-argv[j])) added;}// 如果有至少一个元素被成功添加那么执行以下程序if (added) {// 发送键修改信号signalModifiedKey(c-db,c-argv[1]);// 发送事件通知notifyKeyspaceEvent(REDIS_NOTIFY_SET,sadd,c-argv[1],c-db-id);}// 将数据库设为脏server.dirty added;// 返回添加元素的数量addReplyLongLong(c,added); }稍微深入分析一下set的单个元素的添加过程首先如果已经是 HashTable 的编码那么我们就走正常的 HashTable 的元素添加如果原来是 IntSet 的情况那么我们就需要进行如下判断 如果能够转成 int 的对象isObjectRepresentableAsLongLong那么就用 IntSet 保存。如果用 IntSet 保存的时候如果长度超过5 12REDIS_SET_MAX_INTSET_ENTRIES就转为 HashTable 编码。其他情况统一用 HashTable 进行存储。 2.2、整数集合IntSet 整数集合 IntSet 是 Redis用来保存整数值的集合的一种数据结构可以用来保存 int 类型数据并且可以保证不会出现重复元素。因此当一个集合中只包含整数元素且数量不多的时候Redis 会选择使用整数集合作为底层实现。 IntSet 内部其实是一个数组int8_t coentents[] 数组而且存储数据的时候是有序的因为在查找数据的时候是通过二分查找来实现的。 如果你的集合只有整数值元素并且数量是轻量的这时候 Redis 会使用使用整数集合作为 Redis 集合的底层数据结构。参考如下代码 typedef struct IntSet{// 编码格式uint32_t encoding;// 集合中的元素个数uint32_t length;// 保存元素数据int8_t contents[]; } IntSet;我们拆解下 属性说明“encoding”编码方式“length”数组中元素个数也就是数组的整体长度“contents[]”整数集合集合的每个元素都是数组的一个数组项item。具有特点按值的大小增序排列、不包含任何重复项 “contents” 是整数集合的底层实现保存了整数集合的每一个元素每个元素在该数组中从小到大有序排列并且不重复如何保证有序性和唯一性我们后面讨论插入的时候在说。“contents” 数组虽然声明为 int8_t 类型但其实真正的类型取决于 “encoding” 的值。在操作一个整数集合的时候会首先获取 “encoding” 的值。 举个栗子当我们执行 SADD numbers 1 3 5 向集合对象插入数据时该集合对象在内存的结构如下 2.3、哈希表HashTable Redis 中的 key-value 是通过 dictEntry 对象来实现的而哈希表就是将 dictEntry 进行了再一次的包装得到的这就是哈希表对象 dictht typedef struct dictht {dictEntry **table;//哈希表数组unsigned long size;//哈希表大小unsigned long sizemask;//掩码大小用于计算索引值总是等于size-1unsigned long used;//哈希表中的已有节点数 } dictht;PStable 是一个数组其每个元素都是一个 dictEntry 对象。 hashtable 编码的集合对象使用字典作为底层实现字典的每个键都是一个字符串对象每个字符串对象对应一个集合元素字典的值都是 NULL。当我们执行 SADD fruits apple banana cherry 向集合对象插入数据时该集合对象在内存的结构如下 3、Set常用命令 3.1、添加集合元素 使用 SADD 命令添加集合元素 SADD set value若值已存在则不进行添加并返回 0 3.2、查看集合所有值 使用 SMEMBERS 命令查看集合所有值 SMEMBERS set3.3、判断一个值是否在集合中 使用 SISMEMBER 命令判断一个值是否在集合中 3.4、查看某集合的存值的数量 使用 SCARD 命令查看某集合的存值的数量 SCARD set3.5、删除集合中指定值的元素 使用 SREM 删除集合中指定值的元素 SREM set value3.6、随机选出某集合中一个元素 使用 SRANDMEMBER 命令随机选出某集合中一个元素 SRANDMEMBER set3.7、随机删除某集合中一个元素 使用 SPOP 命令随机删除某集合中一个元素 SPOP set3.8、将一个集合中的某值移动至另一个集合 使用 SMOVE 命令 将一个集合中的某值移动至另一个集合 SMOVE source target value3.9、集合运算差集 使用 SDIFF 命令进行集合运算差集 SDIFF set1 set23.10、集合运算交集 使用 SINTER 命令进行集合运算交集 SINTER set1 set23.11、集合运算并集 使用 SUNION 命令进行集合运算并集 SUNION set1 set2
http://www.zqtcl.cn/news/3509/

相关文章:

  • 网站建设验收总结讲话山东省作风建设网站
  • 服务器做网站天津最好的网站建设公司
  • 正规的丹阳网站建设免费培训机构
  • 沈阳网站建设服务平台做废品推广哪个网站好
  • 网站切图怎么收费做网站便宜的公司
  • 知名高端网站建设企业wordpress文本块表格
  • 广告型网站建设小程序商城怎么推广
  • 怀化网站seo陆良县住房和城乡建设局网站
  • 搭建一个商城类网站go网站开发
  • 金融网站怎么做微信php网站开发流程图
  • 图片网站源码asp友妙招链接
  • 睢宁建网站校园网站建设与管理
  • 北京网站备案注销中心wordpress 内容 管理
  • wordpress来建站网页编程代码
  • 做网站运营需要学的东西盐山联通大厦 网站建设
  • 做ppt网站有哪些内容吗邢台做移动网站价格
  • app网站开发合同wordpress后台登陆地址
  • 适合服务行业做推广的网站做贷款网站
  • 开发网站公司多少钱wordpress中的template
  • 直播网站建设品牌团购模板网站
  • 卓越 网站深圳松岗做网站
  • 公司网站制作站制作电脑做服务器搭建网站
  • 微信公众号文章里好看的图片在哪个网站做建材建设行业网站
  • 成都网站开发技术喜迎二十大作文
  • 王者荣耀个人主页湖北短视频seo营销
  • 深圳傻瓜式网站建设公司好吗建设博客网站制作
  • 仿站小工具怎么用上海做网站收费
  • 南京网站开发南京乐识权威无锡网站推广$做下拉去118cr
  • 携程网站的会计工作怎么做wordpress 多人编辑器
  • 做dota2菠菜网站湖南网站排名优化公司