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

兰州网站优化排名商城网站建设开发多少钱

兰州网站优化排名,商城网站建设开发多少钱,宜昌哪里有专业做网站的,如何制作公司免费网站Redis 是一款开源的#xff0c;内存中的数据结构存储系统#xff0c;它可以用作数据库、缓存和消息代理。Redis 支持多种类型的数据结构#xff0c;如字符串#xff08;String#xff09;、哈希#xff08;Hashes#xff09;、列表#xff08;Lists#xff09;、集合内存中的数据结构存储系统它可以用作数据库、缓存和消息代理。Redis 支持多种类型的数据结构如字符串String、哈希Hashes、列表Lists、集合Sets、有序集合Sorted Sets、位图Bitmaps、HyperLogLogs 和地理空间索引Geospatial。这些数据结构提供了丰富的操作使得 Redis 能够应对各种各样的场景。 在这篇博客中我们将详细介绍 Redis 的各种数据结构包括它们的特性、底层实现、常用命令以及应用场景。无论你是 Redis 的新手还是想深入了解 Redis这篇博客都将为你提供有价值的信息。让我们开始这次的学习之旅吧 文章目录 1、Redis数据结构概述1.1、Redis本质就是哈希表1.2、Redis的哈希冲突与渐进式rehash1.3、Redis数据结 2、Redis基本数据类型2.1、String数据结构简介2.2、List数据结构简介2.3、Hash数据结构简介2.4、Set数据结构简介2.5、ZSet数据结构简介2.6、Stream数据结构简介 3、Redis特殊数据类型3.1、Bitmap位存储3.2、HyperLogLogs基数统计3.3、Geospatial地理位置 1、Redis数据结构概述 1.1、Redis本质就是哈希表 Redis 本身是一个键值对数据库这种键值对的存储方式就是哈希映射Hashmap的一种体现即通过键Key来快速查找对应的值Value。 一个哈希表其实就是一个数组数组的每个元素称为一个哈希桶。也就是说一个哈希表是由多个哈希桶组成的每个哈希桶中保存了键值对数据不管是键类型还是值类型哈希桶中的元素保存的都不是值本身而是指向具体值的指针 如下图中可以看到哈希桶中的 entry 元素中保存了 ‘*key’ 和 *value ’ 指针分别指向了实际的键和值这样一来即使值是一个集合也可以通过 *value 指针被查找到 因为这个哈希表保存了所有的键值对所以它也叫做全局哈希表。 哈希表的最大好处就是让我们可以用 O(1) 的时间复杂度来快速查找到键值对————我们只需要计算键的哈希值就可以知道它对应的哈希桶位置然后就可以访问相应的 Entry元素这个查找过程主要依赖于哈希计算和数据量的多少并没有直接关系。也就是说不管哈希表里有 10 万个键还是 100 万个键我们只需要一次计算就能找到相应的键。 也就是说整个数据库就是一个全局 Hash 表而 Hash 表的时间复杂度就是 O(1)只需要计算每个键的 Hash 值就知道对应的 Hash 桶的位置定位桶里面的 Entry 找到对应数据这个也是 Redis 快的原因之一。 但是如果我们只是了解哈希表 O(1) 复杂度和快速查找特性那么当我们向 Redis 中写入大量数据之后就可能发现操作有时候会突然变慢了。原因是哈希表的冲突问题和 rehash 可能带来的操作阻塞。 1.2、Redis的哈希冲突与渐进式rehash Redis 使用哈希表作为其底层数据结构哈希冲突是哈希表中常见的问题。当两个或更多的键被哈希函数映射到同一个哈希桶时就会发生哈希冲突。Redis 通过链地址法来解决哈希冲突即在每个哈希桶中维护一个链表所有哈希到同一个桶的键值对都存储在这个链表中。 当哈希表中的元素数量增长到一定程度或者哈希表中的元素数量减少到一定程度Redis 会触发哈希表的扩容或收缩这个过程称为 rehash。为了避免 rehash 过程中一次性复制所有元素导致的长时间阻塞Redis 使用了一种称为“渐进式 rehash”的策略。 在渐进式 rehash 过程中Redis 会同时维护新旧两个哈希表并在每次对哈希表进行操作时将一部分桶从旧哈希表移动到新哈希表。同时为了保证查询操作的正确性Redis 在查询时会同时查找新旧两个哈希表。这样通过分摊在一段时间内完成 rehash避免了一次性操作带来的性能问题 1.3、Redis数据结 Redis 中的数据结构有 2 种意思 Redis 键值对中的值的数据类型也就是数据的保存形式其包含 6 种基本类型String字符串、List列表、Hash哈希、Set集合、Sorted Set有序集合、Stream流、Redis5.0引入和三种特殊类型geospatial地理位置、Bitmap位存储、HyperLogLogs基数统计数据结构的底层实现底层数据结构一共有 6 种分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组 从上图可以看出String 的底层是简单动态字符串List 的底层是双向链表和压缩链表Hash 的底层是压缩链表和哈希表Set 的底层是整数数组和哈希表Sorted Set 底层压缩链表和跳表。也就是说 String 类型的底层实现只有一种数据结构也就是简单动态字符串。而 List、Hash、Set 和 Sorted Set这 四种数据类型都有两种底层实现结构。通常情况下我们会把这四种类型称为集合类型它们的特点是一个键对应了一个集合的数据。 Redis 之所以采用不同的数据结构其实是在性能和内存使用效率之间的平衡。 2、Redis基本数据类型 2.1、String数据结构简介 详细链接Redis数据结构String类型全面解析 String 是 Redis 最简单的数据类型也是最常用的数据类型。它可以包含任何数据包括字符串、整数或者浮点数。在 Redis 中字符串的最大长度可以达到 512MB。 应用场景 缓存将查询结果、页面内容等缓存在 Redis 的 String 结构中提高系统访问速度。计数器Redis String 结构可以将字符串解析为整数进行自增或自减操作适合做各种计数器。分布式锁利用 Redis String 结构的原子性操作可以实现分布式锁。 底层结构 Redis 的 String 类型是二进制安全的它的底层实际上是一个字节数组因此 String 类型可以包含任何数据例如 jpg 图片或者序列化的对象。 常用命令 SET key value设置键的值。GET key获取键的值。DEL key删除键。INCR key将键的值增加 1。DECR key将键的值减少 1。APPEND key value将给定 value 值追加到原值的末尾。STRLEN key返回键值的长度。 2.2、List数据结构简介 详细链接Redis数据结构List类型全面解析 List 是 Redis 的一种数据类型它是简单的字符串列表按插入顺序排序。你可以添加一个元素到头部左边或尾部右边。在 Redis 中列表最多可以包含 2^32 - 1 个元素。 应用场景 消息队列可以利用 List 的 push 和 pop 操作实现生产者消费者模型。时间线、动态消息比如微博的时间线可以将最新的内容放在 List 的最前面。 底层结构 Redis List 的底层实现为双向链表和压缩列表两种当列表中的元素个数较少且每个元素的大小较小的时候Redis 会选择压缩列表作为底层实现这样可以更加节省内存。当数据量变大时Redis 会自动将底层实现从压缩列表切换为双向链表。 常用命令 LPUSH key value将一个或多个值插入到列表头部。RPUSH key value将一个或多个值插入到列表尾部。LPOP key移除并返回列表的第一个元素。RPOP key移除并返回列表的最后一个元素。LRANGE key start stop返回列表中指定区间内的元素。LINDEX key index返回列表中指定位置的元素。LLEN key返回列表的长度。 2.3、Hash数据结构简介 详细链接Redis数据结构Hash类型全面解析 Hash 是 Redis 的一种数据类型它是键值对集合。是一个字符串字段和字符串值之间的映射表其字段和值的最大长度都是 512MB。在 Redis 中哈希可以存储超过 4 亿个键值对。 应用场景 存储对象Hash 结构可以看作是 String 类型的 field 和 value 的映射表特别适合用于存储对象。数据缓存可以将数据库中的一条记录映射成一个 Hash 结构Hash 的每个字段对应记录的每个列。 底层结构 Redis Hash 的底层实现为压缩列表和哈希表两种当 Hash 中的元素个数较少且每个元素的大小较小的时候Redis 会选择压缩列表作为底层实现这样可以更加节省内存。当数据量变大时Redis 会自动将底层实现从压缩列表切换为哈希表。 常用命令 HSET key field value将哈希表 key 中的字段 field 的值设为 value。HGET key field获取存储在哈希表中指定字段的值。HDEL key field删除哈希表 key 中的一个或多个指定字段。HGETALL key获取在哈希表中指定 key 的所有字段和值。HLEN key获取哈希表中字段的数量。HEXISTS key field查看哈希表 key 中指定的字段是否存在。 2.4、Set数据结构简介 详细链接Redis数据结构Set类型全面解析 Set 是 Redis 的一种数据类型它是字符串类型的无序集合。和列表一样你可以添加、删除、查找元素。但是它保证每个元素只出现一次。在 Redis 中集合最多可以包含 2^32 - 1 个元素。 应用场景 社交网络中的好友关系、共同好友、二度好友等功能。利用集合支持的交集、并集、差集等操作可以计算共同喜好、全部的喜好、自己独有的喜好等。 底层结构 Redis Set 的底层实现为整数集合和哈希表两种当集合中的元素都是整数且元素数量较少时Redis 会选择整数集合作为底层实现这样可以更加节省内存。当数据量变大或者集合中的元素不全是整数时Redis 会自动将底层实现从整数集合切换为哈希表。 常用命令 SADD key member将一个或多个成员元素加入到集合中。SMEMBERS key返回集合中的所有成员。SISMEMBER key member判断 member 元素是否是集合 key 的成员。SREM key member移除集合中一个或多个成员元素。SCARD key返回集合中的元素的数量。 注意事项 集合中的元素是无序的如果需要获取有序的数据可以使用 Sorted Set 数据类型。集合中的元素不允许重复如果需要存储重复元素可以使用 List 数据类型。 2.5、ZSet数据结构简介 详细链接Redis数据结构Zset类型全面解析 ZSet有序集合是 Redis 的一种数据类型它在 Set 的基础上增加了一个权重参数 score使得集合中的元素能够按 score 进行有序排列。在 Redis 中有序集合的最大成员数是 2^32 - 1。 应用场景 排行榜应用有序集合使得我们能够方便地实现排行榜比如网站的文章排行、学生成绩排行等。带权重的消息队列可以通过 score 来控制消息的优先级。 底层结构 Redis ZSet 的底层实现为跳跃列表和哈希表两种跳跃列表保证了元素的排序和快速的插入性能哈希表则提供了快速查找的能力。 常用命令 ZADD key score member向有序集合添加一个或多个成员或者更新已存在成员的分数。ZRANGE key start stop [WITHSCORES]返回有序集中指定区间内的成员。ZREM key member移除有序集合中的一个或多个成员。ZCARD key获取有序集合的成员数。ZSCORE key member返回有序集中成员的分数值。 注意事项 有序集合中的元素是唯一的但分数score可以重复。插入、删除、查找的时间复杂度都是 O(log(N))。对于获取排名排行榜的操作Redis 有序集合是非常高效的。 2.6、Stream数据结构简介 详细链接Redis数据结构Stream类型全面解析 Stream 是 Redis 5.0 版本引入的新特性它是一种类似于日志系统的数据结构用于存储多个键值对的列表每个键值对都会被分配一个自动递增的ID。Stream 主要用于实现消息队列的功能如 Apache Kafka。 应用场景 消息队列Stream 可以作为生产者消费者模型的一种实现生产者添加消息到 Stream消费者从 Stream 中读取消息并处理。日志记录由于 Stream 中的每个元素都有唯一的 ID并且这个 ID 是自动递增的因此非常适合用来记录日志。 底层结构 Redis Stream 的底层实现为一种叫做快速列表quicklist的数据结构这是一种同时包含了压缩列表ziplist和双向链表特性的数据结构既可以利用压缩列表节省内存又可以利用双向链表在两端进行快速的添加、删除操作。 常用命令 XADD key ID field value [field value …]向 Stream 中添加元素。XRANGE key start end [COUNT count]获取 Stream 中指定范围的元素。XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …]从 Stream 中读取数据。XDEL key ID [ID …]从 Stream 中删除指定 ID 的元素。XLEN key获取 Stream 中的元素数量。 注意事项 Stream 是 Redis 中唯一一个可以安全地进行多个写入操作的数据结构因为每个元素都有一个唯一的、自动递增的 ID。Stream 中的元素一旦被添加就不能被修改只能被删除。 3、Redis特殊数据类型 3.1、Bitmap位存储 Redis 的 Bitmap 是一种特殊的字符串数据结构它可以用来存储位bit数据。每个位可以存储 0 或 1 两种值因此 Bitmap 可以非常高效地存储大量的布尔值。 Redis 的 Bitmap 数据结构可以用于多种场景特别是需要高效存储和操作大量布尔值的场景。以下是一些常见的使用场景 用户活跃度统计可以用 Bitmap 来记录用户的登录情况每个位对应一个用户位的值表示用户是否登录。通过统计位值为 1 的数量就可以得到活跃用户的数量。 功能开关如果一个系统有很多可开启或关闭的功能可以用 Bitmap 来存储每个功能的开关状态。 用户权限管理可以用 Bitmap 来存储用户的权限信息每个位对应一个权限位的值表示用户是否拥有该权限。 统计和分析Bitmap 可以用于各种统计和分析任务例如统计特定条件的用户数量或者分析用户的行为模式等。 需要注意的是虽然 Bitmap 可以非常高效地存储大量的布尔值但是它的索引是基于位的因此如果需要存储的数据有自己的特定索引如用户 ID那么可能需要额外的数据结构来维护这种映射关系。 Bitmap 的主要特点是空间效率极高因为每个布尔值只占用一个位。此外Redis 提供了一系列的命令可以对 Bitmap 进行各种位操作如设置、获取、统计位值为 1 的数量等。 以下是一些常用的 Bitmap 命令 SETBIT设置 Bitmap 中指定位置的位值。 SETBIT mykey 7 1GETBIT获取 Bitmap 中指定位置的位值。 GETBIT mykey 7BITCOUNT统计 Bitmap 中位值为 1 的数量。 BITCOUNT mykeyBITOP对一个或多个 Bitmap 进行位操作如 AND、OR、NOT、XOR 等。 BITOP AND destkey mykey1 mykey2需要注意的是虽然 Bitmap 可以非常高效地存储大量的布尔值但是它的索引是基于位的因此如果需要存储的数据有自己的特定索引如用户 ID那么可能需要额外的数据结构来维护这种映射关系。 3.2、HyperLogLogs基数统计 HyperLogLogs 是 Redis 提供的一种概率型的数据结构用于估计集合的基数不重复元素的数量。HyperLogLogs 的优点是无论集合中包含多少元素它只需要使用固定大小的内存大约 12KB。 应用场景 统计在线用户数如果需要统计一个网站的独立访客数量使用传统的 Set 结构可能会消耗大量的内存而使用 HyperLogLogs 只需要消耗固定大小的内存。统计大数据集合的基数例如统计一亿个用户中有多少不同的搜索关键词。 常用命令 PFADD key element [element …]将指定元素添加到 HyperLogLog 中。PFCOUNT key [key …]返回给定 HyperLogLog 的基数估算值。PFMERGE destkey sourcekey [sourcekey …]将多个 HyperLogLog 合并为一个 HyperLogLog。 注意事项 HyperLogLogs 提供的是基数的估计值而不是精确值但误差率通常不超过 0.81%。一旦一个元素被添加到 HyperLogLog就不能再被移除。HyperLogLog 对元素的顺序没有要求也就是说无论元素以何种顺序被添加最后的基数估算值都是一样的。 3.3、Geospatial地理位置 Geospatial地理空间索引是 Redis 提供的一种特殊类型的 Sorted Set用于存储地理位置信息如经纬度并能够快速计算出两个地点之间的距离。 应用场景 地理位置相关的功能例如查找附近的人、查找附近的商家等。计算两个地点之间的距离。 常用命令 GEOADD key longitude latitude member [longitude latitude member …]添加一个或多个地理空间位置到指定的 key 中。GEODIST key member1 member2 [unit]计算两个给定位置之间的距离。GEOHASH key member [member …]返回一个或多个位置元素的 Geohash 表示。GEOPOS key member [member …]返回一个或多个位置元素的经纬度。GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]查询指定半径内的地理信息位置。 注意事项 Geospatial 使用的是地球模型所以计算出的距离是大圆距离。Geospatial 的底层实现是 Sorted Set所以它的一些操作如添加、删除、查找的时间复杂度和 Sorted Set 是一样的。
http://wiki.neutronadmin.com/news/7297/

相关文章:

  • 网站管理助手v3做办公用品网站工作计划
  • 网站建设 云南wordpress设置固定链接伪静态
  • 接单网站开发东莞网站建设网络公司公司
  • 免备案网站空间购买网站设计公司排行
  • 网站开发技术栈房屋 哪个网站做的最好
  • 外行学习个人网站建设页面设计稿
  • 合肥集团网站建设哪个好wordpress安装插件502
  • 免费域名申请网站空间ui设计做网站
  • .net 网站域账号自动验证码云南网站建设价格
  • 网站建设服务 杭州营销自动化是什么意思
  • 江西住房和城乡建设信息网站陕西网站建设培训
  • 帮别人做网站赚钱6官方网站建设银行信用卡
  • 粉红色网站欣赏wordpress 腾讯云存储
  • 太原网站搜索优化wordpress注册表格
  • 东莞新闻头条新闻百度推广整体优化网站
  • 智能建站软件哪个好网站权重有什么用
  • 播放swf文件 自动弹出网站怎么做招聘网站的数据分析
  • 电子商务网站建设的具体内容新网站如何做流量
  • 客户评价 网站建设薪火相传网站建设
  • 做啪啪网站建设工程查询网站
  • 中国黄金集团建设有限公司网站免费棋牌网站建设
  • 青岛网站seo建筑设计模板
  • 网站的域名怎么起网站备案价格
  • app定制网站建设应有尽有手机网站模板cms
  • 网站建设邀标函免费下载软件的网站
  • 昆明网站免费制作wordpress主题 qux
  • 深圳做网站乐云seo费用优惠宁波网站建设制作多少钱
  • 个人业务网站建设wordpress 首页摘要
  • 温州专业微网站制作公司云主机多个网站
  • 淘宝网站边上的导航栏怎么做湖北营销型网站建设