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

博敏 网站开发网站开发与实现文献综述

博敏 网站开发,网站开发与实现文献综述,上海网站建设托管,内江市建设培训中心网站Redis Hash数据类型 几乎所有的主流编程语言都提供了哈希(hash)类型#xff0c;它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中#xff0c;哈希类型是指值本身又是一个键值对结构#xff0c;形如key “key”#xff0c;value {ffield1, value1 }, … {fieldN…Redis Hash数据类型 几乎所有的主流编程语言都提供了哈希(hash)类型它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中哈希类型是指值本身又是一个键值对结构形如key “key”value {ffield1, value1 }, … {fieldN, valueN } }Redis 键值对和哈希类型二者的关系可以用下图来表示。 字符串和哈希类型对比 哈希类型中的映射关系通常称为 field-value用于区分 Redis 整体的键值对(key-value) ,注意这里的 value 是指 field 对应的值不是键 (key) 对应的值请注意 value 在不同上下文的作用。 命令 hset和hget hset设置hash中指定的字段(field)的值(value)。 语法 HSET key field value [field value ...]时间复杂度插入一组 field 为 O(1),插入 N 组 field 为 O(N) 返回值添加的字段的个数。 如果当前字段已经存在此时hset相当于更新则返回0 示例 redis hset myhash field1 Hello (integer) 1 redis hget myhash field1 Helloredis hset myhash field1 hello field2 world (integer) 2hget获取 hash 中指定字段的值。 语法 HGET key field时间复杂度O(1) 返回值字段对应的值或者nilo 示例: redis hset myhash field1 foo (integer) 1 redis hget myhash field1 foo redis hget myhash field2 (nil)hexists 判断hash中是否有指定的字段。 语法 HEXISTS key field时间复杂度O(1) 返回值1 表示存在0 表示不存在。 示例 redis hset myhash field1 foo (integer) 1 redis hexists myhash field1 (integer) 1 redis hexists myhash field2 (integer) 0hdel 删除hash中指定的字段。 语法 HDEL key field [field ...]时间复杂度删除⼀个元素为 O(1) 删除 N 个元素为 O(N). 返回值本次操作删除的字段个数。 示例 redis hset myhash field1 foo (integer) 1 redis hdel myhash field1 (integer) 1 redis hexists myhash filed (integer) 0 redis hdel myhash field2 (integer) 0hkeys 获取hash中的所有字段。 语法 HKEYS key时间复杂度O(N), N 为 field 的个数.。 返回值字段列表。 示例 redis hset myhash field1 Hello (integer) 1 redis hset myhash field2 World (integer) 1 redis hkeys myhash 1) field1 2) field2hvals 获取hash中的所有的值。 语法 HVALS key时间复杂度O(N), N 为 field 的个数。 返回值所有的值。 示例 redis hset myhash field1 Hello (integer) 1 redis hset myhash field2 World (integer) 1 redis hvals myhash 1) Hello 2) Worldhgetall 获取 hash 中的所有字段以及对应的值。 语法 HGETALL key时间复杂度O(N), N 为 field 的个数 返回值字段和对应的值。 示例 redis hset myhash field1 Hello (integer) 1 redis hset myhash field2 World (integer) 1 redis hgetall myhash 1) field1 2) Hello 3) field2 4) Worldhmget ⼀次获取hash中多个字段的值。 语法 HMGET key field [field ...]时间复杂度只查询⼀个元素为 O(1), 查询多个元素为 O(N), N 为查询元素个数。 返回值字段对应的值或者 nil。 示例 redis hset myhash field1 Hello (integer) 1 redis hset myhash field2 World (integer) 1 redis hmget myhash field1 field2 nofield 1) Hello 2) World 3) (nil)在使用 HGETALL 时如果哈希元素个数比较多会存在阻塞 Redis 的可能。如果开友人员只需要获取部分 field可以使用 HMGET如果一定要获取全部field可以尝试使用 HSCAN 命令该命令采用渐进式遍历哈希类型。 hlen 获取 hash 中的所有字段(key)的个数。 语法 HLEN key时间复杂度O(1) 返回值字段个数。 示例 redis hset myhash field1 Hello (integer) 1 redis hset myhash field2 World (integer) 1 redis hlen myhash (integer) 2hsetnx 在字段不存在的情况下设置 hash 中的字段和值。 语法 HSETNX key field value时间复杂度O(1) 返回值1 表示设置成功0 表示失败。 示例 redis hsetnx myhash field Hello (integer) 1 redis hsetnx myhash field World (integer) 0 redis hget myhash field Hellohincrby 将hash中字段对应的数值添加指定的值。 语法 HINCRBY key field increment时间复杂度O(1) 返回值该字段变化之后的值。 示例 redis hset myhash field 5 (integer) 1 redis hincrby myhash field 1 (integer) 6 redis hincrby myhash field -1 (integer) 5 redis hincrby myhash field -10 (integer) -5hincrbyfloat hincrby的浮点数版本。 语法 HINCRBYFLOAT key field increment时间复杂度O(1) 返回值该字段变化之后的值。 示例 redis hset mykey field 10.50 (integer) 1 redis hincrbyfloat mykey field 0.1 10.6 redis hincrbyfloat mykey field -5 5.6 redis hset mykey field 5.0e3 #5000 (integer) 0 redis HINCRBYFLOAT mykey field 2.0e2 #200 5200内部编码 哈希的内部编码有两种 ziplist(压缩列表)当哈希类型元素个数小于 hash-max-ziplist-entries 配置默认512个)、同时所有值都小于 hash-max-ziplist-value 配置默认64字节)时Redis 会使用 ziplist 作为哈希的内部实现ziplist 使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比 hashtable 更加优秀。hashtable (哈希表)︰当哈希类型无法满足 ziplist 的条件时Redis 会使用 hashtable 作为哈希的内部实现因为此时 ziplist 的读写效率会下降而 hashtable 的读写时间复杂度为O(1)。 下面的示例演示了哈希类型的内部编码以及响应的变化。 1当 field 个数比较少且没有大的 value 时内部编码为 ziplist 127.0.0.1:6379 hmset hashkey f1 v1 f2 v2 OK 127.0.0.1:6379 object encoding hashkey ziplist2当有 value 大于 64 字节时内部编码会转换为 hashtable 127.0.0.1:6379 hset hashkey f3 6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 (integer) 1 127.0.0.1:6379 object encoding hashkey hashtable3当 field 个数超过 512 时内部编码也会转换为 hashtable 127.0.0.1:6379 hmset hashkey f1 v1 f2 v2 f3 v3 ... 省略 ... f513 v513 OK 127.0.0.1:6379 object encoding hashkey hashtable使用场景 图关系型数据表保存用户信息为关系型数据表记录的两条用户信息用户的属性表现为表的列每条用户信息表现为行。如果映射关系表示这两个用户信息则如图映射关系表示用户信息所示。 关系型数据表保存用户信息 映射关系表示用户信息 相比于使用Json格式的字符串缓存用户信息哈希类型变得更加直观并且在更新操作上变得更灵活。可以将每个用户的id定义为键后缀多对field-value对应用户的各个属性类似如下伪代码: UserInfo getUserInfo(long uid) {// 根据 uid 得到 Redis 的键String key user: uid;// 尝试从 Redis 中获取对应的值userInfoMap Redis 执⾏命令hgetall key;// 如果缓存命中hitif (value ! null) {// 将映射关系还原为对象形式UserInfo userInfo 利⽤映射关系构建对象(userInfoMap);return userInfo;}// 如果缓存未命中miss// 从数据库中根据 uid 获取⽤⼾信息UserInfo userInfo MySQL 执⾏ SQLselect *from user_info where uid uid// 如果表中没有 uid 对应的⽤⼾信息if (userInfo null) {响应 404 return null;}// 将缓存以哈希类型保存Redis 执⾏命令hmset key name userInfo.name age userInfo.age city userInfo.c// 写⼊缓存为了防⽌数据腐烂rot设置过期时间为 1 ⼩时3600 秒Redis 执⾏命令expire key 3600// 返回⽤⼾信息return userInfo; }但是需要注意的是哈希类型和关系型数据库有两点不同之处 哈希类型是稀疏的而关系型数据库是完全结构化的例如哈希类型每个键可以有不同的 field而关系型数据库一旦添加新的列所有行都要为其设置值即使为null关系数据库可以做复杂的关系查询而 Redis去模拟关系型复杂查询例如联表查询、聚合查询等基本不可能,维护成本高。 缓存方式对比 原生字符串类型⸺使用字符串类型每个属性⼀个键。 set user:1:name James set user:1:age 23 set user:1:city Beijing优点实现简单针对个别属性变更也很灵活。缺点∶占用过多的键内存占用量较大同时用户信息在Redis中比较分散缺少内聚性所以这种方案基本没有实用性。 序列化字符串类型例如 JSON 格式 set user:1 经过序列化后的⽤⼾对象字符串优点∶针对总是以整体作为操作的信息比较合适编程也简单。同时如果序列化方案选择合适内存的使用效率很高。缺点本身序列化和反序列需要一定开销同时如果总是操作个别属性则非常不灵活。 哈希类型 hmset user:1 name James age 23 city Beijing优点简单、直观、灵活。尤其是针对信息的局部变更或者获取操作。 。 set user:1:name James set user:1:age 23 set user:1:city Beijing优点实现简单针对个别属性变更也很灵活。缺点∶占用过多的键内存占用量较大同时用户信息在Redis中比较分散缺少内聚性所以这种方案基本没有实用性。 序列化字符串类型例如 JSON 格式 set user:1 经过序列化后的⽤⼾对象字符串优点∶针对总是以整体作为操作的信息比较合适编程也简单。同时如果序列化方案选择合适内存的使用效率很高。缺点本身序列化和反序列需要一定开销同时如果总是操作个别属性则非常不灵活。 哈希类型 hmset user:1 name James age 23 city Beijing优点简单、直观、灵活。尤其是针对信息的局部变更或者获取操作。缺点需要控制哈希在ziplist和 hashtable两种内部编码的转换可能会造成内存的较大消耗。
http://www.yutouwan.com/news/61930/

相关文章:

  • 如何查看一个网站是什么程序cms做的四川建站
  • 扬州天猫网站建设宣传册设计与制作模板免费
  • 上海网站建设上海员君前端网站做中 英文怎么说
  • 网站怎样做的有吸引力网站建设的关键要素
  • 青岛网站推广哪家便宜如何免费申请网站域名
  • 厦门哪些企业做视频网站的wordpress登陆链接
  • 甪直做网站wordpress推荐人插件
  • 对方把我的网站他网站内页友情链接 站长工具检测到是无反链网站开发 岗位及职责
  • 网站建设论文文献wordpress群发邮件
  • 网站页面设计特点江苏建设工程信息网一体化平台官网
  • 家用宽带做网站服务器辽宁网站建设平台
  • html5网站建设微信运营公司织梦模板企业微信公众平台
  • 长春建设平台网站的公司房地产公司网站下载
  • 借贷网站开发是否合法做白酒用哪个分类信息网站
  • 百度关键词推广费用太原seo推广外包
  • 建设街小学网站asp+sql server典型网站建设案例
  • 合作建设网站协议深圳建设集团大厦
  • 做一个网站需要什么火车头wordpress发布接口
  • 湖南网站建设方案优化重庆在百度做个网站多少钱
  • 网站模板侵权问题网站建设中模板 模板无忧
  • 一个网站两个域名备案自己做网站卖机器设备
  • 深圳网站建设哪家口碑好wordpress排序优化
  • 创建网站根目录企业活动网站创意案例
  • 网站开发具体步骤凡科建站做的网站收录慢吗
  • 网站看不到排版怎么办哪个网站可以宣传做的蛋糕
  • 网站开发业务好做吗哪里有制作网站系统
  • 手机网站制作 费怎么做分录郑州seo网络优化公司
  • 做百度移动网站快速教育局网站群建设方案
  • 做淘宝客需要建网站吗seo系统培训
  • 水墨 网站源码网页制作培训多少钱一天