点击蓝字关注我吧
【本文详细介绍了非关系型数据库Redis中哈希表的基本概念和常见的冲突处理方法,欢迎读者朋友们阅读、转发和收藏!】
1.1 哈希表
哈希表又称散列表,基本思想是:以数据表中的每个记录的关键字 K 为自变量,通过一种函数 H ( k )计算出函数值。把这个值解释为一块连续存储空间的单元地址,将该记录存储到这个单元中。在此称为函数 H 为哈希函数或散列函数。
同义词:具有不同关键词而哈希地址相同的对象称为同义词
冲突现象:根据哈希函数算出的哈希地址的位置上已经存在记录,这种情况为冲突现象。
1.1.1 哈希函数构造方法:
1 、直接定址法
直接定址法是以关键字 k 本身或关键字加上某个数值常量 c 作为哈希地址的方法。该哈希函数 H ( k )为:
H ( k ) =k+c ( c>0 或 c=0 )
特点:
1 )计算简单;
2 )避免了冲突的发生;
3 )当关键字的分布基本连续时,可使用直接定址法的哈希函数,如果关键字分布不连续将造成内存单元大量浪费。
2 、除留余数法
取关键字 k 除以哈希表长度 m 所得余数作为哈希函数地址的方法。即:
H(k)=k%m
特点:
简单常用的构造方法,关键是选择好哈希表的长度 m ,使得数据集合中的每一个关键字通过该函数转化后映射到哈希表的任意地址上的概率相等。
3 、平方取中法
取关键字平方后的中间几位作为哈希函数地址(如果超出范围时,可以再取模)
4 、折叠法
将关键字分隔成位数相同的几部分,然后将这几部分的叠加和作为哈希地址(如果超出范围,可以再取模)
这种方法适合在关键字的位数较多,而地址区间较小的情况。
5 、数值分析法
如果事先知道所有可能的关键字的取值时,可以通过对这些关键字进行分析,发现其中变化规律,构造出相应的哈希函数。
1.2 处理冲突的方法
1.2.1 开放地址法
当冲突发生时,形成一个地址序列,沿着这个序列逐个探测,直到找出一个“空“ 的开放地址,将发生冲突的关键字值存放到该地址中去。
包括:
线性探测法
从冲突地址(假设为 d )开始,依次探测 d+1 、 d+2…m-1 ,直到有空闲位置可以存放冲突处的关键字为止。容易造成关键字的堆积问题
平方探测法
假设发生冲突的地址为 d ,则平方探查法的探查顺序为:d+1^2 , d+2^2…
1.2.2 链地址法
把所有关键字为同义词的记录存储在一个线性链表中。
1.3 Redis Hash 类型操作
HDEL key field2[field2]:删除一个或多个哈希字段
HEXISTS key field:判断一个哈希字段存在与否
HGET key field:获取存储在指定的键散列字段的值
HGETALL key:让所有的字段和值在指定的键存储在一个哈希
HINCRBY key field increment:由给定数量增加的哈希字段的整数值
HINCRBYFLOAT key field increment:由给定的递增量哈希字段的浮点
HIKEYS key:获取所有在哈希字段
HLEN key:获取哈希字段数
HMGET key field1 [field2]:获得所有给定的哈希字段的值
HMGET key field1 value1 [field2 value2]:获得多个哈希字段的值
HSET key field value:设置哈希字段的字符串值
HSETNX key field value:设置哈希字段的值,仅当该字段不存在
HVALS key:获取在哈希中的所有值
HSCAN key cursor [MATCH pattern][COUNT count]:增量迭代哈希字段及相关值
我知道你在看哟