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

古镇做灯饰网站的公司杭州关键词优化外包

古镇做灯饰网站的公司,杭州关键词优化外包,wordpress新主题tint,线上营销方案案例范文1.hash类型的基本介绍 哈希表[之前学过的所有数据结构中,最最重要的] 1.日常开发中,出场频率非常高. 2.面试中,非常重要的考点, Redis 自身已经是键值对结构了Redis 自身的键值对就是通过 哈希 的方式来组织的 把 key 这一层组织完成之后, 到了 value 这一层~~ value 的其中…

1.hash类型的基本介绍

哈希表[之前学过的所有数据结构中,最最重要的]

1.日常开发中,出场频率非常高.

2.面试中,非常重要的考点,

Redis 自身已经是键值对结构了Redis 自身的键值对就是通过 哈希 的方式来组织的
把 key 这一层组织完成之后, 到了 value 这一层~~ value 的其中一种类型还可以再是 哈希

哈希类型中的映射关系通常称为 field-value,⽤于区分 Redis 整体的键值对(key-value),
注意这⾥的 value 是指 field 对应的值,不是键(key)对应的值,请注意 value 在不同上下
⽂的作⽤。

2.hash命令

2.1 hset

设置 hash 中指定的字段(field)的值(value)。
HSET key field value [field value ...]
命令有效版本:2.0.0 之后
时间复杂度:插⼊⼀组 field 为 O(1), 插⼊ N 组 field 为 O(N)
返回值:添加的字段的个数。
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HGET myhash field1
"Hello"

2.2 hget 

获取 hash 中指定字段的值。
语法:
HGET key field
命令有效版本:2.0.0 之后
时间复杂度:O(1)
返回值:字段对应的值或者 nil。
⽰例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HGET myhash field1
"foo"
redis> HGET myhash field2
(nil)

2.3 HEXISTS

判断 hash 中是否有指定的字段。
HEXISTS key field

命令有效版本:2.0.0 之后

时间复杂度:O(1)
返回值:1 表⽰存在,0 表⽰不存在。
⽰例:

 redis> HSET myhash field1 "foo"

(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0

2.4 HDEL

删除 hash 中指定的字段。
语法:
HDEL key field [field ...]
命令有效版本:2.0.0 之后
时间复杂度:删除⼀个元素为 O(1). 删除 N 个元素为 O(N).
返回值:本次操作删除的字段个数。
⽰例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
  • del 删除的是 key
  • hdel 删除的是 field 

2.5 HKEYS

获取 hash 中的所有字段。

语法:
HKEYS key
命令有效版本:2.0.0 之后
时间复杂度:O(N), N 为 field 的个数.
返回值:字段列表。

 redis> HSET myhash field1 "Hello"

(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"

 2.6 HVALS

获取 hash 中的所有的值。
语法:
HVALS key
命令有效版本:2.0.0 之后
时间复杂度:O(N), N 为 field 的个数.
返回值:所有的值。
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"

2.7 HGETALL

获取 hash 中的所有字段以及对应的值。
语法:
HGETALL key
命令有效版本:2.0.0 之后
时间复杂度: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) "World"

2.8 HMGET

⼀次获取 hash 中多个字段的值。
语法:
HMGET key field [field ...]
命令有效版本:2.0.0 之后
时间复杂度:只查询⼀个元素为 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命令,该命令采⽤渐进式遍历哈希类型。
【敲一次命令,遍历一小部分.
再敲一次,再遍历一小部分
时间就是可控的~~
化整为零

ConcurrentHashMap(线程安全的 哈希表)

这个哈希表在扩容的时候,也是按照化整为零的方式进行的!!
Java 标准库直接提供了一些线程安全的 集合类
(Java 中也有"容器"这样的术语,指的是别的了)

2.9 HLEN

获取 hash 中的所有字段的个数。
HLEN key
命令有效版本:2.0.0 之后
时间复杂度:O(1)
返回值:字段个数。

示例 

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2

2.10 HSETNX

在字段不存在的情况下,设置 hash 中的字段和值。
语法:
HSETNX key field value
命令有效版本:2.0.0 之后
时间复杂度:O(1)
返回值:1 表⽰设置成功,0 表⽰失败。
示例:
redis> HSETNX myhash field "Hello"
(integer) 1
redis> HSETNX myhash field "World"
(integer) 0
redis> HGET myhash field
"Hello"

2.11 HINCRBY

将 hash 中字段对应的数值添加指定的值。
语法:
HINCRBY key field increment
命令有效版本:2.0.0 之后
时间复杂度: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) -5

2.12 HINCRBYFLOAT

HINCRBY 的浮点数版本。
语法:
HINCRBYFLOAT key field increment
命令有效版本:2.6.0 之后
时间复杂度: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
(integer) 0
redis> HINCRBYFLOAT mykey field 2.0e2
"5200"  

 3.命令小节

命令执⾏效果时间复杂度
hset key field value设置值O(1)
hget key field获取值O(1)
hdel key field [field ...]删除 fieldO(k), k 是 field个数
hlen key计算 field 个数O(1)
hgetall key获取所有的 field-value
O(k), k 是 field个数
hmget field [field ...]批量获取 field-value
O(k), k 是 field个数
hmset field value [field
value ...]
批量获取 field-value
O(k), k 是 field个数
hexists key field判断 field 是否存在O(1)
hkeys key获取所有的 field
O(k), k 是 field个数
hvals key
获取所有的 value
O(k), k 是 field个数
hsetnx key field value设置值,但必须在 field 不存在时才能设置成功O(1)
hincrby key field n对应 field-value +nO(1)
hincrbyfloat key field n对应 field-value +nO(1)
hstrlen key field
计算 value 的字符串⻓度
O(1)

 4.hash编码方式

压缩:rar, zip, gzip,7....

一些具体的压缩算法~~

压缩的本质,是针对数据进行重新编码.

不同的数据,有不同的特点.结合这些特点,进行精妙的设计重新编码之后,就能够缩小体积~

哈希的内部编码有两种:
ziplist(压缩列表):当哈希类型元素个数⼩于 hash-max-ziplist-entries 配置(默认 512 个)、 同时所有值都⼩于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使⽤ ziplist 作为哈希的内部实现,ziplist 使⽤更加紧凑的结构实现多个元素的连续存储,所以在节省内存⽅⾯⽐hashtable 更加优秀。 (内部的数据结构更加精妙)
hashtable(哈希表):当哈希类型⽆法满⾜ ziplist 的条件时,Redis 会使⽤ hashtable 作为哈希的内部实现,因为此时 ziplist 的读写效率会下降,⽽ hashtable 的读写时间复杂度为 O(1)。

ziplist 也是同理~~
内部的数据结构也是精心设计的~~
【目的节省内存空间.】
表示一个普通的hash表,可能会浪费一定的空间~~(hash 首先是一个数组~~,数组上有些位置有元素,有些没有元素)
ziplist 付出的代价,进行读写元素,速度是比较慢的,如果元素个数少,慢的并不明显, 如果元素个数太多了,慢就会雪上加霜,
如果,
1.哈希中的元素个数比较少,使用 ziplist 表示.元素个数比较多,使用 hashtable 来表示

2.每个 value 的值长度都比较短,使用 ziplist 表示.如果某个 value 的长度太长了,也会转换成 hashtable

  • hash-max-ziplist-entries 配置(默认 512 个)
  • hash-max-ziplist-value 配置(默认 64 字节)
  • 这个配置项就是可以写到 redis.conf 文件中的~~ 

5.hash的应用 

5.1 作为缓存

string 也是可以作为缓存使用的.

存储结构化的数据(类似于 数据库 表 这样的结构~~),使用 hash 类型更合适一些~~

上述场景使用 string 类型也能做到,
就需要使用到 json 这样的数据格式

  • 如果使用 string(ison)的格式来表示 Userlnfo万一只想获取其中的某个 field, 或者修改某个 field ~~就需要把整个 json 都读出来, 解析成 对象,操作 field,再重写转成 json 字符串,再写回去~~
  • 如果使用 hash 的方式来表示 Userlnfo,就可以使用 field 表示对象的每个属性(数据表的每个列)此时就可以非常方便的修改/获取任何一个属性的值了~~
  • 使用 hash 的方式,确实读写 field 更直观高效,但是付出的是空间的代价~~需要控制哈希在 ziplist 和hashtable 两种内部编码的转换,可能会造成内存的较大消耗。

高内聚

把有关联的东西放在一起,最好能放在指定的地方~~

耦合 

  • 两个模块/代码 之间的关联关系,关联关系越大,越容易相互影响认为是耦合越大~~
  • 追求的是"低耦合,避免"牵一发动全身"这边一改出 bug,影响到了其他的地方

哈希类型和关系型数据库有两点不同之处:

哈希类型是稀疏的,而关系型数据库是完全结构化的,例如哈希类型每个键可以有不同的 field,而关系型数据库⼀旦添加新的列,所有⾏都要为其设置值,即使为 null【稀疏更加节省空间】
关系数据库可以做复杂的关系查询,⽽ Redis 去模拟关系型复杂查询,例如联表查询、聚合查询等基本不可能,维护成本⾼。

http://www.wangmingla.cn/news/56204.html

相关文章:

  • wifiu盘做网站台州seo快速排名
  • 用rp怎么做网站原型中国今日新闻
  • 宝塔面板做网站绑定域名东莞百度seo排名
  • 做erp系统的网站推广专员是做什么的
  • 珍爱网广州seo服务
  • mockpuls可以做网站吗网络营销教学网站
  • 做策划 都上什么网站网络营销的收获与体会
  • 网站首页怎么做石家庄头条今日头条新闻
  • 天津做网站选择津坤科技b关键词自助优化
  • 展馆展示设计公司排名电商关键词排名优化怎么做?
  • 网站做实名验证枸橼酸西地那非片的功效与作用
  • 中山里水网站建设网站搭建平台
  • 虚拟商品货源批发网seo排名优化哪家好
  • 沈阳的网站建设深圳谷歌网络推广公司
  • 快手秒刷自助网站广告关键词查询
  • 流程平台seo整站优化推广
  • 什么网站做聚乙烯醇好的网站优化seo是什么意思
  • 西安专业做网站的的公司分析网站
  • 深圳做响应式网站公司产品推广平台
  • 福州网站建设方案开发网上怎么免费推广
  • 天眼查入口上海百度推广优化公司
  • 上海嘉定网站建设谷歌下载安装
  • 生产企业网站建设百度贴吧网页版
  • 高级网站开发黄页推广
  • 商城用什么系统做网站系统优化大师官方下载
  • 汕头市网站建设公司免费快速网站
  • 淄博网站备案厦门seo优化公司
  • 旅游网站如何建设seo如何优化排名
  • 陕西网站建设的内容西安seo包年服务
  • 石家庄大型公司建站seo优化方案总结