网站标签该站未曾设置keywords
网站描述好玩有趣长知识
seo综合信息
SEO信息 百度来访IP:- | 移动端来访IP:- | 出站链接:11 | 站内链接:12 IP网速: IP地址:43.137.16.111 [中国江苏南京 腾讯云] | 网速:742毫秒 ALEXA排名 世界排名:- | 预估IP:- | 预估PV:- 备案信息 - | 名称:- | 已创建:6年11个月24天
收录 百度 360 搜狗 谷歌 查询 0 0 0 0
电脑关键词 手机关键词 页面友好 首页位置 索引 近期收录 0 0 电脑端优秀 - 0 0
协议类型HTTP/1.1 200 OK 页面类型text/html 服务器类型nginx/1.14.0 (Ubuntu) 是否压缩是 原网页大小135658 压缩后大小27168 压缩比79.97%
网站快照点 滴 诗 词 点 滴 诗 词 首 页 后 端 标 签 归 档 关 于 公 众 号 : i t m a n 1 程 序 猿 , 苦 B 奋 斗 的 伪 文 艺 老 年 w u h a n , C h i n a L e e t c o d e 之 无 重 复 字 符 串 的 最 长 子 串 2 0 2 4 0 5 2 2 a l g o r i t h m 题 目 1 给 定 一 个 字 符 串 s , 请 你 找 出 其 中 不 含 有 重 复 字 符 的 最 长 子 串 的 长 度 。 示 例 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 示 例 1 : 输 入 : s = a b c a b c b b 输 出 : 3 解 释 : 因 为 无 重 复 字 符 的 最 长 子 串 是 a b c , 所 以 其 长 度 为 3 。 示 例 2 : 输 入 : s = b b b b b 输 出 : 1 解 释 : 因 为 无 重 复 字 符 的 最 长 子 串 是 b , 所 以 其 长 度 为 1 。 示 例 3 : 输 入 : s = p w w k e w 输 出 : 3 解 释 : 因 为 无 重 复 字 符 的 最 长 子 串 是 w k e , 所 以 其 长 度 为 3 。 请 注 意 , 你 的 答 案 必 须 是 子 串 的 长 度 , p w k e 是 一 个 子 序 列 , 不 是 子 串 。 暴 力 解 法 这 个 题 最 容 易 想 到 的 还 是 暴 力 解 法 , 既 然 要 找 最 大 的 子 串 , 我 就 从 头 开 始 一 个 一 个 找 。 固 定 子 串 的 左 边 界 , 右 边 界 往 右 移 动 , 逐 个 往 子 串 中 添 加 字 符 , 直 到 子 串 中 已 经 存 在 字 符 , 这 时 找 到 一 个 最 大 子 串 不 重 复 的 子 串 记 录 长 度 ; 左 边 界 右 移 一 个 字 符 , 继 续 操 作 , 不 断 替 换 最 大 值 。 这 里 的 时 间 复 杂 度 是 O ( n 2 ) 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 / / L e n O f N o n R e p e a t e d S u b s t r 无 重 复 子 串 的 最 大 长 度 1 . 暴 力 之 美 f u n c L e n O f N o n R e p e a t e d S u b s t r ( s t r s t r i n g ) i n t e l s e } } r e t u r n m a x L e n } # # # # 回 溯 的 位 置 待 查 找 暴 力 解 法 在 于 , 每 次 都 重 新 开 始 匹 配 下 一 个 位 置 , 没 有 利 用 上 次 匹 配 到 的 位 置 , 假 如 a b c a c 匹 配 到 第 二 个 a 的 时 候 , 要 重 新 从 b 开 始 匹 配 。 实 际 并 不 需 要 , a b c 是 无 重 复 的 , 后 面 的 a 已 经 重 复 了 , 我 们 只 需 要 在 a b c 中 找 到 a 重 复 的 位 置 , 把 他 之 前 的 子 串 去 掉 , 继 续 往 后 匹 配 . 比 如 a b c 匹 配 到 a 的 时 候 重 复 了 , b c a 不 重 复 继 续 往 后 匹 配 。 时 间 复 杂 度 O ( N ) 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 / / L e n O f N o n R e p e a t e d S u b s t r V 1 无 重 复 子 串 的 最 大 长 度 利 用 已 经 比 较 的 最 大 子 串 f u n c L e n O f N o n R e p e a t e d S u b s t r V 1 ( s t r s t r i n g ) i n t / / 以 上 f o r 循 环 可 等 价 于 / / p o s : = s t r i n g s . I n d e x ( m a x S t r , s t r i n g ( s t r [ i n d e x ] ) ) / / i f p o s ! = 1 / / j + 1 不 在 子 串 了 m a x S t r + = s t r i n g ( s t r [ i n d e x ] ) i f m a x L e n l e n ( m a x S t r ) } r e t u r n m a x L e n } 这 个 在 匹 配 的 时 候 还 是 会 遍 历 查 找 m a x S t r 中 是 否 包 含 字 符 , 这 里 做 个 改 进 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 / / L e n O f N o n R e p e a t e d S u b s t r V 2 无 重 复 子 串 的 最 大 长 度 利 用 已 经 比 较 的 最 大 子 串 f u n c L e n O f N o n R e p e a t e d S u b s t r V 2 ( s t r s t r i n g ) i n t ) r k : = 1 / / 初 始 化 r k 为 左 边 的 f o r i n d e x : = 0 ; i n d e x l e n ( s t r ) ; i n d e x + = 1 f o r r k + 1 l e n ( s t r ) r k + = 1 } e l s e } m a x L e n = m a x ( m a x L e n , r k i n d e x + 1 ) } r e t u r n m a x L e n } 这 里 只 是 把 字 符 串 换 成 了 m a p , 查 找 的 时 候 不 用 遍 历 . 后 来 看 别 人 总 结 , 才 发 现 这 个 方 法 叫 做 滑 动 窗 口 , 维 护 一 个 窗 口 , 上 面 的 代 码 实 现 就 是 m a x S t r 或 者 s t r M a p 窗 口 中 出 现 过 的 字 符 , 就 逐 步 缩 小 左 边 窗 口 , 之 后 继 续 扩 大 右 边 窗 口 。 不 管 叫 什 么 字 符 串 匹 配 优 化 方 法 都 是 从 已 经 匹 配 的 子 串 中 , 继 续 往 后 操 作 , 就 是 利 用 前 面 的 匹 配 , 不 能 每 次 都 重 新 开 始 。 一 晚 上 一 个 算 法 , 真 是 衰 🐶 。 L e e t c o d e 之 三 数 之 和 2 0 2 4 0 5 2 1 a l g o r i t h m 题 目 1 2 3 4 5 给 你 一 个 整 数 数 组 n u m s , 判 断 是 否 存 在 三 元 组 [ n u m s [ i ] , n u m s [ j ] , n u m s [ k ] ] 满 足 i ! = j 、 i ! = k 且 j ! = k , 同 时 还 满 足 n u m s [ i ] + n u m s [ j ] + n u m s [ k ] = = 0 。 请 你 返 回 所 有 和 为 0 且 不 重 复 的 三 元 组 。 注 意 : 答 案 中 不 可 以 包 含 重 复 的 三 元 组 。 示 例 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 示 例 1 : 输 入 : n u m s = [ 1 , 0 , 1 , 2 , 1 , 4 ] 输 出 : [ [ 1 , 1 , 2 ] , [ 1 , 0 , 1 ] ] 解 释 : n u m s [ 0 ] + n u m s [ 1 ] + n u m s [ 2 ] = ( 1 ) + 0 + 1 = 0 。 n u m s [ 1 ] + n u m s [ 2 ] + n u m s [ 4 ] = 0 + 1 + ( 1 ) = 0 。 n u m s [ 0 ] + n u m s [ 3 ] + n u m s [ 4 ] = ( 1 ) + 2 + ( 1 ) = 0 。 不 同 的 三 元 组 是 [ 1 , 0 , 1 ] 和 [ 1 , 1 , 2 ] 。 注 意 , 输 出 的 顺 序 和 三 元 组 的 顺 序 并 不 重 要 。 示 例 2 : 输 入 : n u m s = [ 0 , 1 , 1 ] 输 出 : [ ] 解 释 : 唯 一 可 能 的 三 元 组 和 不 为 0 。 示 例 3 : 输 入 : n u m s = [ 0 , 0 , 0 ] 输 出 : [ [ 0 , 0 , 0 ] ] 解 释 : 唯 一 可 能 的 三 元 组 和 为 0 。 提 示 : 3 1 0 5 暴 力 解 法 最 简 单 的 往 往 都 是 暴 力 解 法 , 三 个 数 就 三 重 循 环 , 比 较 简 单 , 直 接 上 代 码 三 重 循 环 时 间 复 杂 度 是 O ( N 3 ) 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 / / T h r e e N u m s B a o l i 暴 力 之 美 f u n c T h r e e N u m s B a o l i ( n u m s [ ] i n t ) [ ] [ ] i n t ) f o r i n d e x : = 0 ; i n d e x l e n ( n u m s ) ; i n d e x + = 1 ) i f _ , o k : = r e p M a p [ u n V a l ] ; o k r e p M a p [ u n V a l ] = s t r u c t r e s = a p p e n d ( r e s , [ ] i n t ) } } } } r e t u r n r e s } f u n c g e t U n i q u e V a l ( n u m s [ 3 ] i n t ) s t r i n g n u m s [ j + 1 ] = n u m s [ j ] } / / 插 入 j 后 面 n u m s [ j + 1 ] = t } r e t u r n f m t . S p r i n t f ( % d , % d , % d , n u m s [ 0 ] , n u m s [ 1 ] , n u m s [ 2 ] ) } 双 指 针 法 这 里 既 然 三 个 数 之 和 为 0 , 要 么 三 个 数 都 是 0 , 必 须 有 一 个 负 数 , 这 里 是 不 是 可 以 考 虑 先 将 数 组 排 序 , 固 定 一 个 数 , 该 数 后 面 使 用 , 头 尾 双 指 针 , 将 三 个 指 针 位 置 的 数 相 加 , 如 果 小 于 0 , 那 将 左 边 的 指 针 右 移 , 这 里 为 啥 ? 直 接 就 右 移 , 因 为 数 组 有 序 , 右 边 指 针 已 经 是 最 大 的 数 了 , 只 能 增 加 最 小 的 数 , 才 可 能 等 于 0 。 应 该 很 好 理 解 。 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 f u n c T h r e e N u m R e p ( n u m s [ ] i n t ) [ ] [ ] i n t l e f t , r i g h t : = i n d e x + 1 , l e n ( n u m s ) 1 f o r l e f t / / 后 面 两 个 数 s : = n u m s [ i n d e x ] + n u m s [ l e f t ] + n u m s [ r i g h t ] i f s > 0 e l s e i f s 0 e l s e i f s = = 0 ) l e f t + = 1 r i g h t = 1 / / 先 移 动 左 右 指 针 , 避 免 出 现 下 面 两 个 条 件 都 不 满 足 的 情 况 , 当 时 踩 坑 了 , 智 商 堪 忧 f o r l e f t 1 ] = = n u m s [ l e f t ] f o r l e f t 1 ] = = n u m s [ r i g h t ] } } } r e t u r n r e s } 代 码 实 现 的 是 思 路 , 思 路 有 了 代 码 实 现 还 搞 半 天 , 这 是 编 码 能 力 的 问 题 吗 ? 写 过 之 后 再 来 看 这 个 思 路 有 , 代 码 又 要 搞 半 天 , 我 理 解 应 该 是 见 的 少 了 。 M a c O S 永 久 免 费 使 用 T y p o r a 2 0 2 4 0 5 1 7 s o f t w a r e T y p o r a T y p o r a 是 一 款 M a r k d o w n 编 辑 器 和 阅 读 器 。 个 人 觉 得 挺 好 用 的 , 可 是 已 经 开 启 收 割 模 式 。 这 里 附 上 激 活 的 软 件 下 载 地 址 , 下 载 的 可 能 比 较 慢 , 大 家 耐 心 等 待 . m a c 版 本 T y p o r a w i n 系 统 1 . 8 . 1 0 ( 附 带 激 活 ) 安 装 使 用 下 载 安 装 完 成 后 , 在 m a c 下 会 提 示 如 下 错 误 按 照 如 下 配 置 “ 仍 要 打 开 ” 就 可 以 了 打 开 后 就 可 以 开 心 的 使 用 了 。 数 据 库 与 缓 存 如 何 保 持 一 致 性 2 0 2 3 0 5 2 2 r e d i s , s e r v i c e 数 据 库 与 缓 存 如 何 保 持 一 致 缓 存 是 常 用 的 优 化 数 据 查 询 慢 的 一 种 方 法 , 数 据 库 出 现 瓶 颈 的 时 候 , 我 们 会 给 服 务 加 上 一 层 缓 存 , 如 R e d i s , 命 中 缓 存 就 不 用 查 询 数 据 库 了 。 减 轻 数 据 库 压 力 , 提 高 服 务 器 性 能 。 数 据 一 致 性 引 入 缓 存 后 , 数 据 出 现 两 份 , 在 数 据 变 更 的 时 候 , 就 需 要 考 虑 缓 存 与 数 据 库 的 一 致 性 。 由 于 更 新 数 据 库 与 更 新 缓 存 操 作 是 两 个 步 骤 , 在 高 并 发 的 场 景 下 , 会 出 现 什 么 问 题 呢 ? 我 们 来 分 析 一 下 。 先 更 新 数 据 库 如 下 图 所 示 , 高 并 发 场 景 下 存 在 数 据 不 一 致 。 先 更 新 缓 存 同 样 也 是 会 出 现 不 一 致 的 场 景 , 如 下 图 所 示 所 以 , 无 论 是 先 更 新 数 据 库 还 是 更 新 r e d i s , 都 会 存 在 数 据 不 一 致 的 场 景 , 由 于 单 个 操 作 不 是 原 子 操 作 ( 并 发 导 致 执 行 数 据 未 知 ) , 也 没 有 事 物 的 支 持 ( 一 个 成 功 一 个 失 败 导 致 数 据 不 一 致 ) , 高 并 发 就 会 存 在 不 可 预 知 的 顺 序 , 导 致 结 果 与 预 期 不 一 致 。 既 然 更 新 有 问 题 , 那 缓 存 直 接 删 除 缓 存 呢 ? 在 更 新 的 时 候 直 接 删 除 缓 存 , 查 询 的 时 候 如 果 没 有 缓 存 就 查 库 , 并 设 置 缓 存 . 如 下 图 所 示 读 策 略 步 骤 读 取 缓 存 , 命 中 直 接 返 回 未 命 中 , 读 取 数 据 库 , 并 设 置 缓 存 写 策 略 步 骤 删 除 缓 存 更 新 数 据 库 读 取 的 逻 辑 比 较 简 单 , 先 读 缓 存 , 再 读 数 据 库 , 但 写 策 略 删 除 缓 存 与 更 新 数 据 库 这 两 个 执 行 顺 序 看 似 无 关 紧 要 , 谁 先 谁 后 都 不 影 响 。 我 们 具 体 分 析 一 下 。 先 删 除 缓 存 如 下 图 所 示 , 读 请 求 来 先 查 询 数 据 , 没 查 到 , 这 个 时 候 有 个 更 新 请 求 , 先 删 除 缓 存 , 之 后 读 请 求 开 始 读 取 数 据 ( 数 据 未 更 新 旧 数 据 ) 并 将 旧 数 据 写 入 缓 存 。 更 新 请 求 更 新 数 据 库 为 新 的 数 据 , 这 时 候 数 据 不 一 致 。 先 更 新 数 据 库 先 删 除 缓 存 有 可 能 出 现 不 一 致 的 场 景 , 那 先 更 新 数 据 库 呢 ? 来 跟 着 我 的 思 路 看 一 下 。 同 样 , 一 个 读 请 求 与 一 个 更 新 请 求 , 读 请 求 先 检 查 缓 存 , 没 数 据 就 从 数 据 库 读 取 数 据 ( 这 时 候 还 是 旧 的 数 据 ) , 在 写 缓 存 之 前 , 更 新 请 求 更 新 了 数 据 , 并 执 行 了 清 理 缓 存 的 操 作 , 这 个 时 候 , 读 请 求 的 设 置 缓 存 操 作 执 行 , 就 出 现 了 不 一 致 。 问 题 的 关 键 还 是 非 原 子 操 作 , 无 事 务 支 持 , 导 致 并 发 出 现 未 知 的 执 行 顺 序 。 分 布 式 锁 对 于 比 较 严 格 的 场 景 , 可 以 加 分 布 式 锁 , 将 更 新 与 删 除 缓 存 两 步 合 为 一 步 。 也 就 是 , 数 据 更 新 可 以 加 锁 , 等 更 新 完 成 及 缓 存 删 除 后 释 放 锁 , 读 请 求 也 是 加 锁 , 发 现 有 写 锁 就 等 待 , 读 锁 就 继 续 读 。 分 布 式 读 写 锁 可 以 解 决 并 发 导 致 的 不 一 致 问 题 。 延 迟 双 删 针 对 「 先 删 除 缓 存 , 再 更 新 数 据 库 」 可 以 用 延 迟 双 删 的 操 作 。 更 新 请 求 在 删 除 缓 存 后 , 等 待 一 段 时 间 , 再 进 行 一 次 缓 存 删 除 操 作 , 就 可 以 避 免 缓 存 中 缓 存 旧 数 据 。 常 见 问 题 在 面 试 的 过 程 中 , 经 常 会 假 想 , 在 操 作 缓 存 的 时 候 , 网 络 抖 动 导 致 缓 存 操 作 失 败 , 这 个 时 候 很 明 显 数 据 也 是 不 一 致 的 。 就 比 如 , 更 新 完 数 据 库 , 删 除 缓 存 的 时 候 失 败 了 , 怎 么 保 证 一 致 ? 重 试 要 保 证 强 一 致 , 只 能 多 次 删 除 , 异 步 执 行 删 除 , 失 败 后 重 试 几 次 , 一 直 失 败 可 以 增 加 告 警 机 制 配 合 。 也 可 以 记 录 失 败 的 k e y , 下 次 读 取 的 时 候 避 开 , 总 之 要 保 证 强 一 致 , 大 家 应 该 有 不 少 好 的 方 法 。 M y S Q L b i n l o g 订 阅 比 较 高 级 的 一 种 方 案 , 或 者 说 比 较 复 杂 , b i n l o g 推 送 数 据 变 更 记 录 , 直 接 删 除 缓 存 。 不 过 , 引 入 一 种 机 制 , 就 会 导 致 系 统 越 来 越 复 杂 , 这 个 就 看 系 统 的 取 舍 了 。 控 制 协 程 ( g o r o u t i n e ) 的 并 发 数 量 2 0 2 1 1 0 2 0 G o l a n g , G o r o u t i n e s 1 . 并 发 过 高 导 致 程 序 崩 溃 先 看 一 个 简 单 的 例 子 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 f u n c m a i n ( ) ( i ) } w g . W a i t ( ) } 这 个 例 子 要 创 建 m a t h . M a x I n t 3 2 个 协 程 , 每 个 协 程 只 是 输 出 当 前 的 编 号 , 正 常 情 况 下 , 会 乱 序 输 出 0 ~ m a t h . M a x I n t 3 2 的 数 字 , 但 实 际 执 行 一 段 时 间 后 直 接 p a n i c 。 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 1 2 9 8 2 1 1 2 5 1 1 1 7 1 2 9 7 7 5 2 p a n i c : t o o m a n y c o n c u r r e n t o p e r a t i o n s o n a s i n g l e f i l e o r s o c k e t ( m a x 1 0 4 8 5 7 5 ) g o r o u t i n e 1 3 0 0 0 6 4 [ r u n n i n g ] : i n t e r n a l / p o l l . ( * f d M u t e x ) . r w l o c k ( 0 x c 0 0 0 0 2 6 1 2 0 , 0 x 0 ? ) / u s r / l o c a l / g o / s r c / i n t e r n a l / p o l l / f d _ m u t e x . g o : 1 4 7 + 0 x 1 1 b i n t e r n a l / p o l l . ( * F D ) . w r i t e L o c k ( . . . ) / u s r / l o c a l / g o / s r c / i n t e r n a l / p o l l / f d _ m u t e x . g o : 2 3 9 i n t e r n a l / p o l l . ( * F D ) . W r i t e ( 0 x c 0 0 0 0 2 6 1 2 0 , ) / u s r / l o c a l / g o / s r c / i n t e r n a l / p o l l / f d _ u n i x . g o : 3 7 0 + 0 x 7 2 o s . ( * F i l e ) . w r i t e ( . . . ) / u s r / l o c a l / g o / s r c / o s / f i l e _ p o s i x . g o : 4 8 o s . ( * F i l e ) . W r i t e ( 0 x c 0 0 0 0 1 2 0 1 8 , ) / u s r / l o c a l / g o / s r c / o s / f i l e . g o : 1 7 5 + 0 x 6 5 f m t . F p r i n t l n ( , ) / u s r / l o c a l / g o / s r c / f m t / p r i n t . g o : 2 8 5 + 0 x 7 5 f m t . P r i n t l n ( . . . ) / u s r / l o c a l / g o / s r c / f m t / p r i n t . g o : 2 9 4 m a i n . m a i n . f u n c 1 ( 0 x 0 ? ) / U s e r s / s h i g u o f u / D o c u m e n t s / h w . g o : 1 6 + 0 x 8 f c r e a t e d b y m a i n . m a i n / U s e r s / s h i g u o f u / D o c u m e n t s / h w . g o : 1 4 + 0 x 3 c p a n i c : t o o m a n y c o n c u r r e n t o p e r a t i o n s o n a s i n g l e f i l e o r s o c k e t ( m a x 1 0 4 8 5 7 5 ) 报 错 信 息 也 很 明 显 , t o o m a n y c o n c u r r e n t o p e r a t i o n s o n a s i n g l e f i l e o r s o c k e t 对 单 个 f i l e / s o c k e t 的 并 发 操 作 个 数 超 过 了 系 统 最 大 值 , 这 个 错 误 是 由 于 f m t . S p r i n t f 引 起 的 , 它 将 格 式 化 数 据 输 出 到 标 准 输 出 。 标 准 输 出 在 l i n u x 系 统 中 是 文 件 描 述 符 为 1 的 文 件 , 标 准 错 误 输 出 是 2 , 标 准 输 入 是 0 。 总 之 就 是 系 统 资 源 耗 尽 了 。 那 假 如 去 掉 f m t 这 行 输 出 呢 ? 程 序 很 可 能 就 会 因 为 内 部 不 足 而 被 迫 退 出 , 笔 者 尝 试 去 掉 跑 出 错 误 , 电 脑 1 6 G 的 , 跑 到 5 G 多 已 经 卡 的 不 行 , 就 强 行 退 出 了 。 其 实 也 好 理 解 , 每 个 协 程 约 占 用 2 K 控 件 , 1 M 个 协 程 就 是 2 G 的 内 存 , 那 M a t h . M a x I n t 读 者 自 己 计 算 下 。 2 . 如 何 解 决 呢 2 . 1 利 用 c h a n n e l 的 缓 冲 区 大 小 来 控 制 协 程 个 数 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 f u n c m a i n ( ) , 3 ) f o r i : = 0 ; i 1 0 ; i + + w g . A d d ( 1 ) g o f u n c ( i i n t ) ( i ) } w g . W a i t ( ) } m a k e ( c h a n s t r u c t , 3 ) 缓 冲 区 大 小 为 3 , 没 有 被 消 费 的 情 况 下 , 最 多 发 送 3 个 就 被 阻 塞 了 开 启 协 程 前 往 通 道 写 入 数 据 , 缓 冲 区 满 就 阻 塞 了 协 程 结 束 后 消 费 通 道 数 据 , 缓 冲 区 就 可 以 继 续 写 入 数 据 , 就 可 以 再 创 建 新 的 协 程 如 下 进 行 封 装 , 可 直 接 像 w a i t g r o u p 一 样 使 用 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 i m p o r t ( c o n t e x t s y n c ) c o n s t d e f a u l t S i z e = 3 2 / / S i z e W a i t G r o u p t h e s t r u c t c o n t r o l l i m i t o f w a i t g r o u p t y p e S i z e W a i t G r o u p s t r u c t / / b u f f e r t o b u f t h e c u r r e n t n u m b e r o f g o r o u t i n e s w g s y n c . W a i t G r o u p / / t h e r e a l w a i t g r o u p } / / N e w S i z e W a i t G r o u p w a i t g r o u p w i t h l i m i t f u n c N e w S i z e W a i t G r o u p ( s i z e i n t ) * S i z e W a i t G r o u p r e t u r n 密 码 忘 记 进 入 e s 任 意 节 点 1 2 3 4 5 6 / b i n / e l a s t i c s e a r c h u s e r s u s e r a d d m i s s p a s s w d r s u p e r u s e r E n t e r n e w p a s s w o r d : E R R O R : I n v a l i d p a s s w o r d . . . p a s s w o r d s m u s t b e a t l e a s t [ 6 ] c h a r a c t e r s l o n g [ r o o t @ c f e e a b 4 b b 0 e b e l a s t i c s e a r c h ] # . / b i n / e l a s t i c s e a r c h u s e r s u s e r a d d m i s s p a s s w d r s u p e r u s e r E n t e r n e w p a s s w o r d : R e t y p e n e w p a s s w o r d : 然 后 使 用 新 建 的 用 户 执 行 1 操 作 即 可 修 改 密 码 . e s d o c k e r c o m p o s e 配 置 h t t p s : / / g i t h u b . c o m / s h i g u o f u 2 0 1 2 / s c r i p t s / b l o b / m a s t e r / d o c k e r c o m p o s e / e s . y m l 运 行 准 备 : 创 建 目 录 , 配 置 文 件 证 书 文 件 都 是 在 宿 主 机 器 上 的 / r o o t / d a t a / e s 7 . 5 . 1 目 录 下 证 书 文 件 ( 证 书 生 成 见 上 文 ) / 配 置 文 件 配 置 文 件 1 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 c l u s t e r . n a m e : t e s t n o d e . n a m e : e s n o d e 3 # n e t w o r k . b i n d _ h o s t : 0 . 0 . 0 . 0 n e t w o r k . h o s t : 0 . 0 . 0 . 0 # n e t w o r k . p u b l i s h _ h o s t : e l a s t i c s e a r c h 0 3 h t t p . p o r t : 9 2 0 0 t r a n s p o r t . t c p . p o r t : 9 3 0 0 h t t p . c o r s . e n a b l e d : t r u e h t t p . c o r s . a l l o w o r i g i n : * n o d e . m a s t e r : t r u e n o d e . d a t a : t r u e c l u s t e r . i n i t i a l _ m a s t e r _ n o d e s : [ e s n o d e 1 , e s n o d e 2 , e s n o d e 3 ] # 加 h o s t d i s c o v e r y . s e e d _ h o s t s : [ e l a s t i c s e a r c h 0 1 , e l a s t i c s e a r c h 0 3 , e l a s t i c s e a r c h 0 2 ] x p a c k . s e c u r i t y . e n a b l e d : t r u e x p a c k . s e c u r i t y . t r a n s p o r t . s s l . e n a b l e d : t r u e x p a c k . s e c u r i t y . t r a n s p o r t . s s l . k e y s t o r e . t y p e : P K C S 1 2 x p a c k . s e c u r i t y . t r a n s p o r t . s s l . t r u s t s t o r e . t y p e : P K C S 1 2 x p a c k . s e c u r i t y . t r a n s p o r t . s s l . v e r i f i c a t i o n _ m o d e : c e r t i f i c a t e x p a c k . s e c u r i t y . t r a n s p o r t . s s l . k e y s t o r e . p a t h : e l a s t i c c e r t i f i c a t e s . p 1 2 x p a c k . s e c u r i t y . t r a n s p o r t . s s l . t r u s t s t o r e . p a t h : e l a s t i c c e r t i f i c a t e s . p 1 2 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0 8 1 v e r s i o n : 2 . 2 s e r v i c e s : e l a s t i c s e a r c h 0 1 : i m a g e : e l a s t i c s e a r c h : 7 . 1 0 . 1 c o n t a i n e r _ n a m e : e s 0 1 n e t w o r k s : s h i g u o f u _ n e t # e n v i r o n m e n t : 放 入 配 置 文 件 # d i s c o v e r y . t y p e = s i n g l e n o d e # x p a c k . s e c u r i t y . e n a b l e d = t r u e # x p a c k . l i c e n s e . s e l f _ g e n e r a t e d . t y p e = b a s i c # x p a c k . s e c u r i t y . t r a n s p o r t . s s l . e n a b l e d = t r u e p o r t s : 9 2 0 0 : 9 2 0 0 9 2 0 1 : 9 3 0 0 v o l u m e s : / r o o t / d a t a / e s 7 . 5 . 1 1 : / u s r / s h a r e / e l a s t i c s e a r c h / d a t a / u s r / l o c a l / j d k : / u s r / s h a r e / e l a s t i c s e a r c h / j d k / r o o t / d a t a / e s 7 . 5 . 1 1 / e l a s t i c c e r t i f i c a t e s . p 1 2 : / u s r / s h a r e / e l a s t i c s e a r c h / c o n f i g / e l a s t i c c e r t i f i c a t e s . p 1 2 / r o o t / d a t a / e s 7 . 5 . 1 1 / e s . y m l : / u s r / s h a r e / e l a s t i c s e a r c h / c o n f i g / e l a s t i c s e a r c h . y m l e l a s t i c s e a r c h 0 2 : i m a g e : e l a s t i c s e a r c h : 7 . 1 0 . 1 c o n t a i n e r _ n a m e : e s 0 2 n e t w o r k s : s h i g u o f u _ n e t # e n v i r o n m e n t : 放 入 配 置 文 件 # d i s c o v e r y . t y p e = s i n g l e n o d e # x p a c k . s e c u r i t y . e n a b l e d = t r u e # x p a c k . l i c e n s e . s e l f _ g e n e r a t e d . t y p e = b a s i c # x p a c k . s e c u r i t y . t r a n s p o r t . s s l . e n a b l e d = t r u e p o r t s : 9 3 0 0 : 9 2 0 0 9 3 0 1 : 9 3 0 0 v o l u m e s : / u s r / l o c a l / j d k : / u s r / s h a r e / e l a s t i c s e a r c h / j d k / r o o t / d a t a / e s 7 . 5 . 1 2 : / u s r / s h a r e / e l a s t i c s e a r c h / d a t a / r o o t / d a t a / e s 7 . 5 . 1 2 / e l a s t i c c e r t i f i c a t e s . p 1 2 : / u s r / s h a r e / e l a s t i c s e a r c h / c o n f i g / e l a s t i c c e r t i f i c a t e s . p 1 2 / r o o t / d a t a / e s 7 . 5 . 1 2 / e s . y m l : / u s r / s h a r e / e l a s t i c s e a r c h / c o n f i g / e l a s t i c s e a r c h . y m l e l a s t i c s e a r c h 0 3 : i m a g e : e l a s t i c s e a r c h : 7 . 1 0 . 1 c o n t a i n e r _ n a m e : e s 0 3 n e t w o r k s : s h i g u o f u _ n e t # e n v i r o n m e n t : 放 入 配 置 文 件 # d i s c o v e r y . t y p e = s i n g l e n o d e # x p a c k . s e c u r i t y . e n a b l e d = t r u e # x p a c k . l i c e n s e . s e l f _ g e n e r a t e d . t y p e = b a s i c # x p a c k . s e c u r i t y . t r a n s p o r t . s s l . e n a b l e d = t r u e p o r t s : 6 6 6 6 : 9 2 0 0 6 6 6 7 : 9 3 0 0 v o l u m e s : / r o o t / d a t a / e s 7 . 5 . 1 3 : / u s r / s h a r e / e l a s t i c s e a r c h / d a t a / r o o t / d a t a / e s 7 . 5 . 1 3 / e l a s t i c c e r t i f i c a t e s . p 1 2 : / u s r / s h a r e / e l a s t i c s e a r c h / c o n f i g / e l a s t i c c e r t i f i c a t e s . p 1 2 / u s r / l o c a l / j d k : / u s r / s h a r e / e l a s t i c s e a r c h / j d k / r o o t / d a t a / e s 7 . 5 . 1 3 / e s . y m l : / u s r / s h a r e / e l a s t i c s e a r c h / c o n f i g / e l a s t i c s e a r c h . y m l k i b a n a : i m a g e : k i b a n a : 7 . 1 0 . 1 c o n t a i n e r _ n a m e : k i b a n a l i n k s : e l a s t i c s e a r c h 0 1 n e t w o r k s : s h i g u o f u _ n e t e n v i r o n m e n t : E L A S T I C S E A R C H _ H O S T S = h t t p : / / e l a s t i c s e a r c h 0 1 : 9 2 0 0 E L A S T I C S E A R C H _ U S E R N A M E = e l a s t i c E L A S T I C S E A R C H _ P A S S W O R D = a e Q w Q K M 0 N 0 n Y d e p e n d s _ o n : e l a s t i c s e a r c h 0 1 p o r t s : 5 6 0 1 : 5 6 0 1 n e t w o r k s : s h i g u o f u _ n e t : d r i v e r : b r i d g e i p a m : c o n f i g : s u b n e t : 1 0 . 1 0 . 2 . 0 / 2 4 N g i n x 负 载 均 衡 算 法 2 0 2 1 0 9 2 0 L o a d B a l a n c e , N g i n x n g i n x 内 置 变 量 内 置 变 量 存 放 在 n g x _ h t t p _ c o r e _ m o d u l e 模 块 中 , 变 量 的 命 名 方 式 和 a p a c h e 服 务 器 变 量 是 一 致 的 。 总 而 言 之 , 这 些 变 量 代 表 着 客 户 端 请 求 头 的 内 容 , 例 如 h t t p u s e r a g e n t , h t t p _ c o o k i e , 等 等 。 下 面 是 n g i n x 支 持 的 所 有 内 置 变 量 : $ a r g _ n a m e 这 个 变 量 是 获 取 链 接 中 参 数 名 为 n a m e 对 应 的 值 ; 如 请 求 链 接 : h t t p : / / s e r v i c e . s h i g u o f u . c n / t e s t ? n a m e = 1 0 0 $ c o n n e c t i o n T C P 连 接 的 序 列 号 , 并 不 是 一 次 h t t p 请 求 就 会 更 滑 一 个 序 列 号 , h t t p 有 k e e p a l i v e 机 制 , 一 个 序 列 号 会 维 持 c o n n e c t i o n _ r e q u e s t s T C P 连 接 当 前 的 请 求 数 量 , 服 务 处 理 请 求 的 个 数 , 重 启 后 重 置 为 0 $ c o n t e n t _ l e n g t h “ C o n t e n t L e n g t h ” 请 求 头 字 段 , 客 户 端 请 求 的 头 部 中 的 c o n t e n t l e n g t h 值 ; $ c o n t e n t _ t y p e “ C o n t e n t T y p e ” 请 求 头 字 段 $ c o o k i e _ n a m e 获 取 c o o k i e 名 称 为 n a m e 的 c o o k i e 值 ; 如 c o o k i e : P H P _ V E R S I O N : 1 . 0 ; N A M E : X I A O M I N G ; … . $ c o o k i e _ N A M E = ‘ X I A O M I N G d o c u m e n t _ r o o t 当 前 请 求 的 文 档 根 目 录 或 别 名 , 即 配 置 文 件 中 的 r o o t 目 录 ; $ d o c u m e n t _ u r i 即 请 求 的 u r i ; 如 : h t t p : / / s e r v i c e . s h i g u o f u . c n / t e s t / i n d e x ? a = 1 $ d o c u m e n t _ u r i = / t e s t / i n d e x $ h o s t 请 求 的 h o s t , 优 先 级 : H T T P 请 求 行 的 主 机 名 > 请 求 头 中 的 ” H O S T ” 字 段 > 符 合 请 求 的 服 务 器 名 $ h o s t n a m e 请 求 的 服 务 主 机 名 $ h t t p _ n a m e 匹 配 任 意 请 求 头 字 段 ; 变 量 名 中 的 后 半 部 分 “ n a m e ” 可 以 替 换 成 任 意 请 求 头 字 段 , 如 在 配 置 文 件 中 需 要 获 取 h t t p 请 求 头 : “ A c c e p t L a n g u a g e ” , 那 么 将 “ - ” 替 换 为 下 划 线 , 大 写 字 母 替 换 为 小 写 , 形 如 : $ h t t p _ a c c e p t _ l a n g u a g e 即 可 ; $ h t t p s 如 果 开 启 了 S S L 安 全 模 式 , 值 为 “ o n ” , 否 则 为 空 字 符 串 ; $ i s _ a r g s 如 果 请 求 中 有 参 数 , 值 为 “ ? ” , 否 则 为 空 字 符 串 ; $ m s e c 当 前 的 U n i x 时 间 戳 ; $ n g i n x _ v e r s i o n n g i n x 版 本 ; $ p i d n g i n x 进 程 p i d $ p i p e 如 果 请 求 来 自 管 道 通 信 , 值 为 “ p ” , 否 则 为 “ . ” $ p r o x y _ p r o t o c o l _ a d d r 获 取 代 理 访 问 服 务 器 的 客 户 端 地 址 , 如 果 是 直 接 访 问 , 该 值 为 空 字 符 串 。 有 些 懵 懂 ; q u e r y _ s t r i n g 链 接 中 的 参 数 列 表 , 同 $ a r g s ; $ r e a l p a t h _ r o o t 当 前 请 求 的 文 档 根 目 录 或 别 名 的 真 实 路 径 , 会 将 所 有 符 号 连 接 转 换 为 真 实 路 径 ; $ r e m o t e _ a d d r 客 户 端 地 址 $ r e m o t e _ p o r t 客 户 端 端 口 $ r e m o t e _ u s e r 用 于 H T T P 基 础 认 证 服 务 的 用 户 名 ; # # # # $ r e q u e s t H T T P 请 求 的 方 法 / 路 径 及 版 本 ; 如 : h t t p : / / s e r v i c e . s h i g u o f u . c n / t e s t / i n d e x $ r e q u e s t = G E T / t e s t / i n d e x H T T P / 1 . 1 $ r e q u e s t _ b o d y 客 户 端 的 请 求 主 体 ; p o s t 中 的 b o d y 的 数 据 部 分 $ r e q u e s t _ c o m p l e t i o n 如 果 请 求 成 功 , 值 为 ” O K ” , 如 果 请 求 未 完 成 或 者 请 求 不 是 一 个 范 围 请 求 的 最 后 一 部 分 , 则 为 空 ; r e q u e s t _ f i l e n a m e 当 前 连 接 请 求 的 文 件 路 径 , 由 r o o t 或 a l i a s 指 令 与 U R I 请 求 生 成 ; $ r e q u e s t _ l e n g t h 请 求 的 长 度 ( 包 括 请 求 的 地 址 , h t t p 请 求 头 和 请 求 主 体 ) ; $ r e q u e s t _ m e t h o d H T T P 请 求 方 法 , 通 常 为 “ G E T ” “ P O S T ” 等 $ r e q u e s t _ t i m e 处 理 客 户 端 请 求 使 用 的 时 间 ; 从 读 取 客 户 端 的 第 一 个 字 节 开 始 计 时 ; $ r e q u e s t _ u r i 客 户 端 请 求 的 u r i ; 如 : h t t p : / / s e r v i c e . s h i g u o f u . c n / t e s t / i n d e x ? a = 1 o r \ \ g . Y o u r M y S Q L c o n n e c t i o n i d i s 2 7 8 6 8 S e r v e r v e r s i o n : 5 . 7 . 2 3 0 u b u n t u 0 . 1 6 . 0 4 . 1 l o g ( U b u n t u ) C o p y r i g h t ( c ) 2 0 0 0 , 2 0 1 8 , O r a c l e a n d / o r i t s a f f i l i a t e s . A l l r i g h t s r e s e r v e d . O r a c l e i s a r e g i s t e r e d t r a d e m a r k o f O r a c l e C o r p o r a t i o n a n d / o r i t s a f f i l i a t e s . O t h e r n a m e s m a y b e t r a d e m a r k s o f t h e i r r e s p e c t i v e o w n e r s . T y p e ‘ h e l p ; ’ o r ‘ \ \ h ’ f o r h e l p . T y p e ‘ \ \ c ’ t o c l e a r t h e c u r r e n t i n p u t s t a t e m e n t . m y s q l > 2 N g i n x 负 载 均 衡 N g i n x 能 够 广 泛 使 用 , 不 仅 是 因 为 它 可 以 作 为 代 理 服 务 , 它 还 提 供 了 适 应 于 不 同 业 务 的 负 载 均 衡 算 法 以 及 判 断 目 标 服 务 的 可 用 性 等 强 大 的 功 能 ; 2 . 1 轮 询 算 法 最 简 单 的 算 法 , 也 是 N g i n x 默 认 的 负 载 均 衡 算 法 ; 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 u p s t r e a m s e r v i c e s e r v e r } 以 上 配 置 是 在 轮 询 的 基 础 上 , 增 加 了 权 重 的 配 置 , 在 上 面 示 例 中 , N g i n x 会 将 三 个 请 求 中 的 两 个 分 发 到 8 8 8 9 端 口 对 应 的 服 务 , 将 另 一 个 请 求 分 发 到 本 地 的 8 8 8 8 端 口 的 服 务 , 并 将 将 t b k . s h i g u o f u . c n 上 的 服 务 作 为 备 用 , 当 分 发 请 求 失 败 会 启 用 备 份 服 务 ; 使 用 N g i n x 的 指 令 w e i g h t 指 令 为 轮 询 的 s e r v i c e 配 置 权 重 ; m a x _ f a i l s 与 f a i l _ t i m t o u 为 服 务 的 高 可 用 配 置 ; 表 示 在 3 0 秒 内 如 果 有 3 个 失 败 的 请 求 , 则 认 为 该 服 务 已 经 宕 掉 , 在 这 3 0 秒 结 束 之 前 不 会 有 新 的 请 求 会 发 送 到 对 应 的 服 务 上 ; 等 这 3 0 秒 结 束 后 , N g i n x 会 尝 试 发 送 一 个 新 的 请 求 到 该 服 务 , 如 果 还 是 失 败 , 则 等 待 3 0 秒 … 以 此 循 环 ; 2 . 2 最 少 连 接 数 1 2 3 4 5 6 u p s t r e a m s e r v i c e 上 面 的 l e a s t _ c o n n 指 令 为 所 负 载 的 应 用 服 务 指 定 采 用 最 少 连 接 数 负 载 均 衡 ; 它 会 将 访 问 请 求 分 发 到 u p s t r e a m 所 代 理 的 服 务 中 , 当 前 打 开 连 接 数 最 少 的 应 用 服 务 器 ; 它 同 时 支 持 轮 询 中 的 w e i g h t 、 m a x _ f a i l s 、 f a i l _ t i m e o u t 选 项 , 来 决 定 给 性 能 更 好 的 应 用 服 务 器 分 配 更 多 的 访 问 请 求 ; 2 . 3 最 短 响 应 时 间 1 2 3 4 5 6 u p s t r e a m s e r v i c e 该 指 令 l e a s t _ t i m e 仅 仅 在 N G I N X P L U S 版 本 中 支 持 , 不 多 说 。 2 . 4 散 列 算 法 分 为 通 用 散 列 算 法 与 i p 散 列 算 法 ; 1 2 3 4 5 6 u p s t r e a m s e r v i c e 通 过 h a s h 指 令 实 现 , 根 据 请 求 或 运 行 时 提 供 的 文 本 、 变 量 或 者 其 他 变 量 的 组 合 生 成 散 列 值 ; 一 般 情 况 , 在 需 要 对 访 问 请 求 进 行 负 载 可 控 , 或 将 访 问 请 求 负 载 到 已 经 有 数 据 缓 存 的 应 用 服 务 的 场 景 下 , 该 算 法 会 非 常 有 用 ; 需 要 注 意 的 是 , 在 u p s t r e a m 中 有 应 用 服 务 的 加 入 或 者 删 除 时 , 会 重 新 计 算 散 列 值 进 行 分 发 ; 1 2 3 4 5 6 u p s t r e a m s e r v i c e 指 令 i p _ h a s h 实 现 , 通 过 计 算 客 服 端 的 i p 地 址 来 生 成 散 列 值 。 G o r o u t i n e 在 项 目 中 的 实 践 2 0 2 1 0 8 0 3 G o l a n g , G o r o u t i n e s G o r o u t i n e 在 项 目 中 的 实 践 G o r o u t i n e 是 G o l a n g 语 言 的 一 大 特 色 , G o r o u t i n e 的 出 现 , 使 得 并 发 得 到 大 幅 提 升 。 我 们 一 起 看 下 G o r o u t i n e 在 项 目 中 的 实 践 。 G o r o u t i n e 并 发 控 制 在 业 务 开 发 中 , 会 碰 到 几 个 相 互 独 立 的 耗 时 操 作 , 可 以 并 行 执 行 , 这 个 时 候 G o r o u t i n e 是 很 方 便 派 上 用 场 的 。 如 下 所 示 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 / / s o m e O p e r a t i o n y o u r w o r k t o d o / / i f w e h a v e s o m e d a t a t o r e t u r n u s e c h a n n e l t o p a s s d a t a f u n c s o m e O p e r a t i o n ( ) e r r o r / / a n o t h e r O p e r a t i o n / / a n o t h e r w o r k i n d e n p e n d e n t w i t h s o m e O p e r a t i o n f u n c a n o t h e r O p e r a t i o n ( ) e r r o r f u n c b i z F u n c ( ) e r r o r / / s y n c . W a t i G r o u p t o s y n c g o r o u t i n e w g . A d d ( 2 ) / / w e h a v e 2 o p e r a t i o n t o d o , s o w e a d d 2 g o f u n c ( ) w g . D o n e ( ) } ( ) g o f u n c ( ) ( ) w g . W a i t ( ) / / w a i t a l l g o r o u t i n e t o r e t u r n / / o t h e r o p e r a t i o n d e p e n d o n t h e t w o b e f o r e } G o r o t i n e 最 大 个 数 上 面 的 案 例 需 要 我 们 知 道 协 程 的 数 量 , 然 后 等 待 所 有 协 程 结 束 , 那 如 果 我 们 不 确 定 协 程 的 个 数 或 者 我 们 需 要 设 置 固 定 个 数 的 协 程 , 该 如 何 做 呢 ? 其 实 也 很 简 单 , 利 用 c h a n n e l 的 阻 塞 特 性 , 创 建 一 个 固 定 长 度 的 c h a n n e l , 创 建 一 个 协 程 , 在 c h a n n e l 中 写 入 一 条 数 据 , 当 c h a n n e l 被 填 满 后 , 就 会 阻 塞 ; 协 程 结 束 后 , 从 c h a n n l e 中 消 费 一 条 数 据 , 协 程 就 又 可 以 写 入 数 据 , 如 此 可 固 定 协 程 的 数 量 。 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 / / w r a p p e d f o r w a i t g r o u p i m p o r t ( c o n t e x t s y n c ) c o n s t d e f a u l t S i z e = 3 2 / / S i z e W a i t G r o u p t h e s t r u c t c o n t r o l l i m i t o f w a i t g r o u p t y p e S i z e W a i t G r o u p s t r u c t / / b u f f e r t o b u f t h e c u r r e n t n u m b e r o f g o r o u t i n e s w g s y n c . W a i t G r o u p / / t h e r e a l w a i t g r o u p } / / N e w S i z e W a i t G r o u p w a i t g r o u p w i t h l i m i t f u n c N e w S i z e W a i t G r o u p ( s i z e i n t ) * S i z e W a i t G r o u p r e t u r n i n d e x 1 0 0 0 ; i n d e x + = 1 } s w g . W a i t ( ) 这 样 , 协 程 的 最 大 数 量 会 保 持 在 1 2 8 个 。 总 结 G o l a n g 提 供 的 c h a n n e l 与 G o r o u t i n e 提 供 很 方 便 的 通 信 与 并 发 功 能 , 在 实 际 的 业 务 开 发 中 , 可 以 很 方 便 讲 相 互 独 立 的 功 能 并 发 处 理 , 提 高 系 统 的 吞 吐 量 。 M y s q l 模 糊 查 找 2 0 2 1 0 7 1 5 M y s q l , s e r v i c e M y s q l 模 糊 查 找 在 业 务 开 发 过 程 中 , 经 常 会 碰 到 需 要 搜 索 的 需 求 ; 结 合 m s y q l 在 模 糊 搜 索 的 时 候 , 很 明 显 会 用 到 l i k e 语 句 , 一 般 情 况 下 , 在 数 据 量 比 较 小 的 时 候 , 按 行 检 索 的 效 率 也 不 是 很 明 显 的 低 效 , 但 当 达 到 百 万 级 , 千 万 级 数 据 量 的 时 候 , 查 询 的 效 率 低 下 是 一 回 事 , 很 可 能 把 数 据 库 拖 垮 , 严 重 影 响 可 用 性 。 这 个 时 候 提 高 查 询 效 率 就 显 得 很 重 要 ! 模 糊 查 找 一 般 情 况 , 我 们 在 查 找 时 候 的 写 法 ( f i e l d 肯 定 是 已 经 建 了 索 引 ) : 1 S E L E C T ` c o l u m n ` F R O M ` t a b l e ` W H E R E ` f i e l d ` l i k e % k e y w o r d % ; 上 面 的 语 句 用 e x p l a i n 解 释 来 看 , S Q L 语 句 并 未 使 用 索 引 , 而 是 全 表 扫 描 , 数 据 量 比 较 大 的 时 候 , 这 效 率 可 想 而 知 。 对 比 下 面 的 写 法 : 1 S E L E C T ` c o l u m n ` F R O M ` t a b l e ` W H E R E ` f i e l d ` l i k e k e y w o r d % ; 这 样 的 写 法 用 e x p l a i n 解 释 看 到 , S Q L 语 句 使 用 了 索 引 , 搜 索 的 效 率 大 大 的 提 高 了 。 但 是 有 的 时 候 , 我 们 在 做 功 能 需 求 的 时 候 , 并 非 要 想 查 询 的 关 键 词 都 在 开 头 , 所 以 如 果 不 是 特 别 的 要 求 , ” k e y w o r k % ” 并 不 能 适 应 所 有 的 查 找 。 所 以 , 我 们 需 要 另 一 种 方 法 。 L O C A T E ( ’ s u b s t r ’ , s t r , s t a r t _ p o s ) M y s q l 提 供 L O C A T E 函 数 , 该 方 法 返 回 查 询 字 符 串 在 被 查 询 字 段 下 的 索 引 。 第 一 个 参 数 为 要 查 询 的 字 符 串 , 第 二 个 为 数 据 库 中 的 字 段 名 称 , 第 三 个 代 表 从 字 段 对 应 的 值 的 第 几 个 字 符 串 开 始 查 找 . 例 , 有 如 下 表 : 1 2 3 4 5 C R E A T E T A B L E ` m e e t i n g s ` ( ` i d ` b i g i n t ( 2 0 ) N O T N U L L A U T O _ I N C R E M E N T , ` d e s ` v a r c h a r ( 2 2 5 ) N O T N U L L D E F A U L T , P R I M A R Y K E Y ( ` i d ` ) ) E N G I N E = I n n o D B ; 以 下 s q l 则 查 询 d e s 字 段 匹 配 “ h e l l o ” 的 行 数 。 这 个 “ h e l l o ” 在 d e s 中 的 可 以 是 开 头 , 可 以 是 结 尾 , 也 可 以 是 中 间 , 非 常 方 便 。 1 S E L E C T * f r o m m e e t i n g s w h e r e L O C A T E ( h e l l o , ` d e s ` ) > 0 ; L O C T A T E 这 个 函 数 有 第 三 个 参 数 , 是 查 找 的 起 始 位 置 , 比 如 可 以 在 上 面 的 s q l 中 加 入 : 1 S E L E C T * f r o m m e e t i n g s w h e r e L O C A T E ( h e l l o , ` d e s ` , 5 ) > 0 ; 我 们 使 用 e x p l a i n 来 检 查 执 行 是 否 命 中 索 引 , 会 发 现 对 搜 索 的 字 段 如 果 存 在 索 引 , 确 实 可 以 命 中 。 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 m y s q l > e x p l a i n S E L E C T * f r o m m e e t i n g s w h e r e L O C A T E ( h e l l o , ` d e s ` ) > 0 \ \ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1 . r o w * * * * * * * * * * * * * * * * * * * * * * * * * * * i d : 1 s e l e c t _ t y p e : S I M P L E t a b l e : m e e t i n g s p a r t i t i o n s : N U L L t y p e : i n d e x p o s s i b l e _ k e y s : N U L L k e y : d e s _ m e e t i n g k e y _ l e n : 2 2 7 r e f : N U L L r o w s : 3 f i l t e r e d : 1 0 0 . 0 0 E x t r a : U s i n g w h e r e ; U s i n g i n d e x 1 r o w i n s e t , 1 w a r n i n g ( 0 . 0 0 s e c ) 如 上 e x p l a i n 的 输 出 语 句 , 确 实 使 用 了 索 引 。 P O S I T I O N ( ‘ s u b s t r ’ I N f i e l d ) p o s i t i o n 可 以 看 做 是 l o c a t e 的 别 名 , 功 能 跟 l o c a t e 一 样 。 其 实 个 人 理 解 , p o s i t i o n 只 是 查 找 是 否 包 含 子 串 , 不 能 指 定 位 置 开 始 。 1 S E L E C T * f r o m m e e t i n g s w h e r e P O S I T I O N ( h e l l o i n ` d e s ` ) ; I N S T R ( s t r , ’ s u b s t r ’ ) 1 S E L E C T ` c o l u m n ` F R O M ` t a b l e ` W H E R E I N S T R ( ` f i e l d ` , k e y w o r d ) > 0 这 个 I N S T R 也 是 子 串 判 断 F I N D _ I N _ S E T F I N D _ I N _ S E T ( s t r 1 , s t r 2 ) 返 回 s t r 2 中 s t r 1 所 在 的 位 置 索 引 , 其 中 s t r 2 必 须 以 ” , ” 分 割 开 。 1 S E L E C T * F R O M p e r s o n W H E R E F I N D _ I N _ S E T ( a p p l y , n a m e ) ; n a m e 的 内 容 是 以 逗 号 分 隔 的 , 如 1 a p p l e , p e a r , o r a n g e 就 可 以 使 用 F I N D _ I N _ S E T 1 s e l e c t * f r o m ` t a b l e ` w h e r e F I N D _ I N _ S E T ( a p p l e , n a m e ) ; 个 人 觉 得 这 个 主 要 是 针 对 s q l 数 组 数 据 的 查 找 ; 数 组 数 据 以 逗 号 分 隔 存 储 到 一 个 字 段 , F I N D _ I N _ S E T 可 以 快 速 找 到 包 含 数 组 元 素 的 行 。 总 结 M y s q l 在 进 行 模 糊 查 找 需 要 注 意 , 前 缀 匹 配 的 时 候 会 用 到 索 引 , 前 后 都 模 糊 , 则 无 法 使 用 索 引 ; 可 以 使 用 M y s q l 提 供 的 函 数 来 “ 曲 线 救 国 ” 来 命 中 索 引 。 1 2 3 N e x t » P o w e r e d b y c a r l s h i , 鄂 I C P 备 1 8 0 0 3 5 5 9 号 1
站点概括关于shiguofu.cn说明:
shiguofu.cn由网友主动性提交被蜘蛛1号整理收录的,蜘蛛1号仅提供shiguofu.cn的基础信息并免费向大众网友展示,shiguofu.cn的是IP地址:43.137.16.111 [中国江苏南京 腾讯云],shiguofu.cn的百度权重为0、百度手机权重为0、百度收录为0条、360收录为0条、搜狗收录为0条、谷歌收录为0条、百度来访流量大约在-之间、百度手机端来访流量大约在-之间、shiguofu.cn的备案号是-、备案人叫-、被百度收录的关键词有0个、手机端关键词有0个、该站点迄今为止已经创建6年11个月24天。
内容声明:1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违规信息,如您发现违规内容,请联系我们进行清除处理!
4、本文地址:http://zhizhu1h.kangle.im/dianyingdh/133002.html,复制请保留版权链接!
中国新媒体信息网(http://www.cciatv.com)是由中国文化信息协会主办,是综合性信息、网络新闻类网站,是为各行业实体机构、企业等实现品牌价值转化而设定的新闻业务渠道...
铝合金加工,铝型材加工,铝合金散热器,铝合金散热片,铝型材散热器,铝合金型材|潍坊三文金属制品有限公司
潍坊三文金属制品有限公司集铝合金型材产品设计、绘图、模具制造、生产、铝合金加工、铝型材加工、表面精处理、销售为一体,国内最大的铝合金散热器生产基地,主要散热产品有铝型材散热器、铝合金散热片、铝型材散热片、太阳花散热器、电子外壳、灯饰外壳等,有需要可与我们联系:18663636969
北京网络营销推广_SEO搜索引擎优化公司_网站排名优化 - 北京卓立海创信息技术有限公司
北京seo公司、网络营销推广、SEO搜索引擎优化、网站排名优化公司,选择北京卓立海创信息技术公司(原名北京卓立海创网络科技有限公司)。卓立海创专注网络营销推广、搜索引擎优化、网站排名优化、SEO优化、网络推广等服务。24小时免费咨询热线:13911029888。
该站暂未设置description...
台州远拓机械股份有限公司创建于1997年,公司专业生产汽车零部件,以高强度紧固件为主要产品。
广州星美建材有限公司防撞软包厂家_纪委审讯谈话留置室防撞软包-星美软包公司-软包-防撞-审讯-纪委-谈话室 -留置-墙面-厂家
广州星美软包公司主要生产防撞软包,谈话室软包,SIW防撞墙系统,专业生产,谈话室防撞软包,审讯室软包,审讯室防撞软包,羁押室防撞软包,询问室软包,公安局软包,派出所防撞软包,法院防撞软包,公检法软包,办案区防撞软包等拥有阻燃环保性能的纪委安全防撞材料的生产。
该站暂未设置description...
重庆新风机,重庆新风系统,重庆风幕机,重庆换气扇,重庆除湿机,重庆绿岛风,重庆油烟净化器_重庆嘉代通风设备有限公司
重庆嘉代通风设备有限公司目前是“绿岛风”、”松下”、“磐顺”、“正野”、“亚克”重庆代理商,主营产品有全热交换器、单向流新风机、新风除湿机、风暖浴霸、风幕机、换气扇、排油烟风机、电风扇、风机、油烟净化器、新风辅材等;咨询热线:023-68627435