哈希

Redis分片机制

主宰稳场 提交于 2019-12-01 04:53:35
文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 前两篇文章对Redis主从复制和主从切换的知识点进行了介绍,但是也很明显的有一点小弊端: 需要定时进行主从复制会影响Redis性能。 主节点宕机后,从所有从节点选择进行主从切换。主从切换的过程中非服务不可用。 引入分片概念--分片机制的作用 而本篇文章主要谈谈Redis的分片机制,如果没有分片机制,Redis就被局限于单机所支持的内存容量。Redis的分片机制允许数据拆分存放在不同的Redis实例上,每个Redis实例只包含所有键的子集。可以减轻单台Redis的压力,提升Redis扩展能力和计算能力。如果我们只使用一个Redis实例,当Redis宕机将会直接停止服务,所以我们可以采取分片机制,将原本一台Redis实例维护的数据,改为由多个Redis实例共同维护这部分数据。 分片方案 (1)范围分片 分片需要将不同key映射到不同Redis实例上存储,所以key的映射规则需要制定一个算法,最简单的一个分片方案应该是范围分片。范围分片理解起来很简单,比如我们存储用户基本信息,我们制定一个算法将用户user_id从0到1000映射到实例A,user_id从1000到2000映射到实例B,以此类推。这个方案很轻松可以使用,但是引发了一个问题:我们需要维护user_id范围和映射实例之间的关系

一致性Hash算法

老子叫甜甜 提交于 2019-12-01 02:50:51
本文章比较好的说明了一致性Hash算法的概念 Hash算法一般分为除模求余和一致性Hash 1、 除模求余:当新增、删除机器时会导致大量key的移动 2、一致性Hash:当新增、删除机器时只会影响到附近的key,因为是环状结构 转载请说明出处: http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。 2、单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。 3、分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲

acwing 139. 回文子串的最大长度

情到浓时终转凉″ 提交于 2019-12-01 02:42:39
题面: 如果一个字符串正着读和倒着读是一样的,则称它是回文的。 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少。 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个小写字符的形式给出。 输入以一个以字符串“END”(不包括引号)开头的行表示输入终止。 输出格式 对于输入中的每个测试用例,输出测试用例编号和最大回文子串的长度(参考样例格式)。 每个输出占一行。 输入样例: abcbabcbabcba abacacbaaaab END 输出样例: Case 1: 13 Case 2: 6题解:马拉车的模板题,这题用字符哈希偏复杂: Manacher算法,但是我们这道题目是锻炼我们的哈希水平,所以我们这里只说如何用哈希算法求解.作者忘记如何使用马拉车算法了… 上一道兔子兔子兔子的题目,我们知道判断两个字符串是否相等,可以使用字符串哈希,也就是将字符串算成P进制数值,然后区间和判断即可,那么这道题目我们需要一个正的字符串,还需要一个反的字符串,然后如果正字符串等于反的字符串,那么奇数回文串就2+1,偶数回文串就直接2即可.之所以要这么做,因为我们是要回文对不对,我们需要将回文拆解成为一个正字符串和一个反字符串,这样才好处理这道题目. 既然如此,我们可以算出一个前缀和,再算出一个后缀和,然后就可以知道,正字符串和一个反字符串

mysql聚簇索引,非聚簇索引

感情迁移 提交于 2019-11-30 23:27:42
聚簇索引错放了整行数据的值,聚簇索引使用了B+TREE,这是一种多路平衡查询书,节点天然有序(方便范围查询和排序,而哈希索引不具备,同时哈希索引适合等值查询,不支持最左前缀匹配规则,且在有大量重复键的情况下,哈希碰撞导致效率低下),末端叶子节点包含了所有的节点,多路使得B+TREE的io查询次数下降, 非聚簇索引只储存了主键的值,通过非聚簇索引查到查询到索引值对应的主键后,再用逐渐去查询聚簇索引中的数据,但只查询某个值时,若当前非聚簇索引 来源: https://www.cnblogs.com/kkkboshow/p/11644561.html

gym 100500B 多项式哈希+Rabbin-Karp/最小表示法

假装没事ソ 提交于 2019-11-30 19:21:48
https://codeforces.com/gym/100500/ $n^3$暴力显然超时,考虑优化 我们考虑题目的特殊性质, 显然,最终的序列我们可以直接通过总和得到 记为$ans$序列 那么,我们考虑另外一个方向的暴力 固定$arr_1$,枚举$arr_2$的循环同构$loop_k(arr2)$,相加得到$n$个不同的序列$A_i$ 固定$arr_3$,枚举$arr_4$的循环同构$loop_k(arr4)$,相加得到$n$个不同的序列$B_i$ 再固定每一个$A_i$,枚举$B_j$的每一个$loop_k(B_j)$ 看这$2n$个序列两两配对能否凑出最终序列 此时复杂度达到了$n^4$ 即,枚举$i,j,k$最后线性判断 我们考虑优化 假设答案的为$i,j,k$且序列长度为$n$ 即,$A_i$与$loop_k(B_j)$相加,可以得到$ans$ 换句话说,如果我们把$ans$和$loop_k(B_j)$相减,可以得到$A_i$的某一个循环同构 此时,我们就可以同时得到2个优化 1.使用多项式哈希,把所有$A_i$放入哈希表中, 直接枚举$j$即可,此时复杂度为$n^3*hashmap$ 2.由于$ans$和$loop_k(B_j)$相减,可以得到$A_i$ 又因为$ans$的每一个循环同构都相等,因此我们换一下枚举的顺序 即$ans$和$B_j$相减,可以得到$loop

redis基础及基本命令

佐手、 提交于 2019-11-30 18:02:29
什么是redis Redis是一个Key-value存储系统,redis提供了丰富的数据结构,包括string(字符串),list(列表),sets(集合),ordered set(有序集合),hashes(哈希)。可以对于这些数据执行原子操作,例如对字符串进行附加操作,递增哈希中的值,向列表中增加元素,计算集合的交集,并集和差集等。 Redis的优点 性能极高: redis能支持超过100k每秒的读写频率。 丰富的数据类型: set集合,ordered set有序集合,list列表,string字符串,hashes哈希 原子性: redis的所有操作都是原子性的,同时redis还支持对几个操作全并后的原子性执行 丰富的特性 :Redis还支持public/subscribe,通知,key过期等等特性。 安装 redis 1、wget 2、tar 3、make 开启 redis 在 ../src/下开启redis-server(服务端)和redis-cli(客户端),先开启服务端。 使用 netstat命令监听6379端口,netstat -nlt |grep "6379"(tcp,不做域名解析,显示socket) redis命令 set数据类型命令 使用 set和get命令来创建和检索string,set命令将取代任何已存在的key,set命令还有一个附加参数

LVS、Nginx、Haproxy负载均衡器比较

不打扰是莪最后的温柔 提交于 2019-11-30 17:55:23
阅读目录(Content) 1 LVS负载均衡的特点 2 Ngnix负载均衡的特点 3 HAProxy负载均衡的特点 4 适用业务场景 5 需要注意的是 6 衡量负载均衡器好坏的几个重要因素 开源软件负载均衡器 1 LVS负载均衡的特点 1) 抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低 2) 工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。 3) 稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived) 4) 应用范围比较广,可以对所有应用做负载均衡; 5) 不支持正则处理,不能做动静分离。 6) 支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接) 7) 配置 复杂,对网络依赖比较大,稳定性很高。 回到顶部(go to top) 2 Ngnix负载均衡的特点 1) 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构; 2) Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能; 3) Nginx安装和配置比较简单,测试起来比较方便; 4) 也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发; 5) 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。

解决hash冲突的常用方法

半世苍凉 提交于 2019-11-30 12:38:23
原文:https://blog.csdn.net/xiajingsong/article/details/84491078 a)开放地址法 这个方法的基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。这个过程可用下式描述: H i ( key ) = ( H ( key )+ d i ) mod m ( i = 1,2,…… , k ( k ≤ m – 1)) 其中: H ( key ) 为关键字 key 的直接哈希地址, m 为哈希表的长度, di 为每次再探测时的地址增量。 采用这种方法时,首先计算出元素的直接哈希地址 H ( key ) ,如果该存储单元已被其他元素占用,则继续查看地址为 H ( key ) + d 2 的存储单元,如此重复直至找到某个存储单元为空时,将关键字为 key 的数据元素存放到该单元。 增量 d 可以有不同的取法,并根据其取法有不同的称呼: ( 1 ) d i = 1 , 2 , 3 , …… 线性探测再散列; ( 2 ) d i = 1^2 ,- 1^2 , 2^2 ,- 2^2 , k^2, -k^2…… 二次探测再散列; ( 3 ) d i = 伪随机序列 伪随机再散列; 例1设有哈希函数 H ( key ) = key mod 7 ,哈希表的地址空间为 0 ~ 6 ,对关键字序列( 32 , 13

去除vue路由跳转地址栏后的哈希值#

无人久伴 提交于 2019-11-30 07:26:17
去除vue路由跳转地址栏后的哈希值#,我们只需要在路由跳转的管理文件router目录下的index.js中加上一句代码即可去掉哈希值# import Vue from 'vue' //1.引入vue-router import Router from 'vue-router' import find from '../components/find' import mall from '../components/mall' import microshop from '../components/microshop' import cloud from '../components/cloud' import personalcenter from '../components/personalcenter' //2.使用vue-router Vue.use(Router) //3.实例化router这个构造函数 let router = new Router({ //去掉地址中的哈希# mode:"history", //5.映射,什么样的地址跳转到什么样的page routes:[ { //根目录 path:'/', name:'首页', component:mall }, { //发现page path:'/find', name:'发现', component:find

一道腾讯面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?布隆过滤器

喜欢而已 提交于 2019-11-30 07:07:35
何为布隆过滤器 还是以上面的例子为例: 判断逻辑: 多次哈希: Guava的BloomFilter 创建BloomFilter 最终还是调用: 使用: 算法特点 使用场景 假设遇到这样一个问题: 一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存? 若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出 。 可能很多人首先想到的会是使用 HashSet ,因为 HashSet 基于 HashMap ,理论上时间复杂度为: O(1) 。达到了快速的目的,但是空间复杂度呢?URL字符串通过Hash得到一个Integer的值,Integer占4个字节,那20亿个URL理论上需要: 20亿*4/1024/1024/1024=7.45G 的内存,不满足空间复杂度的要求。 这里就引出本文要介绍的“布隆过滤器”。 何为布隆过滤器 百科上对布隆过滤器的介绍是这样的: 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 是不是描述的比较抽象?那就直接了解其原理吧! 还是以上面的例子为例: