hash函数

python redis 操作

寵の児 提交于 2019-12-30 04:12:45
1、String 操作   redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建,存在则修改 r.set('name', 'zhangsan') '''参数: set(name, value, ex=None, px=None, nx=False, xx=False) ex,过期时间(秒) px,过期时间(毫秒) nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value) xx,如果设置为True,则只有name存在时,当前set操作才执行''' setex(name, value, time) #设置过期时间(秒) psetex(name, time_ms, value) #设置过期时间(豪秒) mset() #批量设置值 r.mset(name1='zhangsan', name2='lisi') #或 r.mset({"name1":'zhangsan', "name2":'lisi'}) get(name) 获取值 mget(keys, *args) #批量获取 print(r.mget("name1","name2")) #或 li=["name1","name2"] print(r.mget(li)) getset(name, value)

redis总结

淺唱寂寞╮ 提交于 2019-12-30 01:27:35
/*--> */ /*--> */ API使用 redis-py 的API的使用可以分类为: 连接方式 连接池 操作 String 操作 Hash 操作 List 操作 Set 操作 Sort Set 操作 管道 发布订阅 一、操作模式 redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。 #!/usr/bin/env python # -*- coding:utf-8 -*- import redis r = redis.Redis(host='10.211.55.4', port=6379) r.set('foo', 'Bar') print r.get('foo') View Code 二,连接池 redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。 #!/usr/bin/env python # -*- coding:utf-8 -*- import redis pool

HashMap和HashTable

倾然丶 夕夏残阳落幕 提交于 2019-12-28 03:07:00
JAVA的基础知识:数据结构(Map,List,Set等),设计模式,算法,线程相关,IO/NIO,序列化等等 其次是高级特征:反射机制,并发与锁,JVM(GC策略,类加载机制,内存模型)等等 举个例子 就比如问你:HashMap 是不是有序的? 你回答不是有序的。那面试官就会可能继续问你,有没有有序的Map实现类呢? 你如果这个时候说不知道的话,那这块问题就到此结束了。如果你说有TreeMap和LinkedHashMap。 那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的? 如果你回答不上来,那么到此为止。 如果你说TreeMap是通过实现SortMap接口,能够把它保存的键值对根据key排序,基于红黑树,从而保证TreeMap中所有键值对处于有序状态。 LinkedHashMap则是通过插入排序(就是你put的时候的顺序是什么,取出来的时候就是什么样子)和访问排序(改变排序把访问过的放到底部)让键值有序。 1、为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射 HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改 HashMap是非synchronized,所以HashMap很快 HashMap可以接受null键和值

hashlib模块

大兔子大兔子 提交于 2019-12-27 16:02:04
hashlib模块: 1.>什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法), 该算法接受传入的内容,经过运算得到一串hash值. 2.>hash值的特点是: 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验 不能由hash值返解成内容=======>把密码做成hash值,不应该在网络传输明文密码 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的 理解:hash算法就像是一座工厂,工厂接收你送来的原材料(可以使用,.update()为工厂运送原材料). 经过加工返回的产品就是hash值. # --------------------示例--------------------------------------> import hashlib m = hashlib.md5() m.update('hello'.encode()) print(m.hexdigest()) # 5d41402abc4b2a76b9719d911017c592 m.update('alvin'.encode()) print(m.hexdigest()) #

大数据算法系列——布隆过滤器

て烟熏妆下的殇ゞ 提交于 2019-12-27 12:17:08
一、简介 Bloom filter介绍 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有可能会出现错误判断,但不会漏掉判断。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter比其他常见的算法(如hash,折半查找)极大节省了空间。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 二、算法思想 Bloom-Filter算法的核心思想就是利用多个不同的Hash函数来解决“冲突”。 计算某元素x是否在一个集合中,首先能想到的方法就是将所有的已知元素保存起来构成一个集合R,然后用元素x跟这些R中的元素一一比较来判断是否存在于集合R中;我们可以采用链表等数据结构来实现。但是,随着集合R中元素的增加,其占用的内存将越来越大。试想,如果有几千万个不同网页需要下载,所需的内存将足以占用掉整个进程的内存地址空间。即使用MD5,UUID这些方法将URL转成固定的短小的字符串,内存占用也是相当巨大的。 于是,我们会想到用Hash table的数据结构,运用一个足够好的Hash函数将一个URL映射到二进制位数组(位图数组)中的某一位

python爬虫 ---Hash算法

那年仲夏 提交于 2019-12-27 07:13:50
Hash算法 1.定义 Hash :散列,通过关于键值(key)的函数,将数据映射到内存存储中一个位置来访问。这个过程叫做Hash,这个映射函数称做散列函数,存放记录的数组称做散列表(Hash Table),又叫哈希表。 简单地说,它是密码学中的一个重要的函数,一般以 表示。这个函数可以将任意一段数据(一般称这段数据为“消息”)压缩成固定长度的字符串(一般称输出的字符串为“摘要”)。哈希函数需要满足下述条件: 确定性:哈希函数的算法是确定性算法,算法执行过程不引入任何随机量。这意味着相同消息的哈希结果一定相同。 高效性:给定任意一个消息m,可以快速计算 目标抗碰撞性:给定任意一个消息m1,很难找到另一个消息m2,使得 广义抗碰撞性:很难找到两个消息m0不等于m1的情况下,使得 2.优点 先分类,再查找,通过计算,缩小范围,加快查找速度 3.Hash的作用 数字签名:给数据打指纹 比如我们下载一个文件,文件的下载过程中会经过很多网络服务器、路由器的中转,如何保证这个文件就是我们所需要的呢?我们不可能去一一检测这个文件的每个字节,也不能简单地利用文件名、文件大小这些极容易伪装的信息,这时候,我们就需要一种指纹一样的标志来检查文件的可靠性,这种指纹就是我们现在所用的Hash算法(也叫散列算法)。 密码存储 在用户进行网站登录时,如果服务器直接存储用户密码,则如果服务器被攻击者所攻击

HashMap工作原理

本秂侑毒 提交于 2019-12-27 04:12:05
HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。 1.HashMap介绍 HashMap为Map接口的一个实现类,实现了所有Map的操作。HashMap除了允许key和value保存null值和非线程安全外,其他实现几乎和HashTable一致。 HashMap使用散列存储的方式保存kay-value键值对,因此其不支持数据保存的顺序。如果想要使用有序容器可以使用LinkedHashMap。 在性能上当HashMap中保存的key的哈希算法能够均匀的分布在每个bucket中的是时候,HashMap在基本的get和set操作的的时间复杂度都是O(n)。 在遍历HashMap的时候,其遍历节点的个数为bucket的个数+HashMap中保存的节点个数。因此当遍历操作比较频繁的时候需要注意HashMap的初始化容量不应该太大。 这一点其实比较好理解:当保存的节点个数一致的时候,bucket越少

HashMap并发导致死循环 CurrentHashMap

风格不统一 提交于 2019-12-27 03:49:01
为何出现死循环简要说明 HashMap闭环的详细原因 cocurrentHashMap的底层机制 为何出现死循环简要说明   HashMap是非线程安全的,在并发场景中如果不保持足够的同步,就有可能在执行HashMap.get时进入死循环,将CPU的消耗到100%。   HashMap采用链表解决Hash冲突。因为是链表结构,那么就很容易形成闭合的链路,这样在循环的时候只要有线程对这个HashMap进行get操作就会产生死循环,   单线程情况下,只有一个线程对HashMap的数据结构进行操作,是不可能产生闭合的回路的。   只有在多线程并发的情况下才会出现这种情况,那就是在put操作的时候,如果size>initialCapacity*loadFactor,hash表进行扩容,那么这时候HashMap就会进行rehash操作,随之HashMap的结构就会很大的变化。很有可能就是在两个线程在这个时候同时触发了rehash操作,产生了闭合的回路。   推荐使用currentHashMap 多线程下 [HashMap] 的问题: 1、多线程put操作后,get操作导致 死循环 。 2、多线程 put非NULL元素后,get操作得到NULL值 。 3、多线程 put操作,导致元素丢失 。 HashMap闭环的详细原因 Java的HashMap是非线程安全的,所以在并发下必然出现问题

hash实现查找单词

百般思念 提交于 2019-12-27 01:49:19
不可抗拒力,写得比较慢,主要是室友老拉我打wz,公开处刑! 功能描述 构造一个hash表,对单词来实现O(1)时间的查找。 实现过程 hash函数利用了高低位的hash,自作聪明的加上了位移,啧啧啧,一测试发现冲突打得夸张,加容量也没咋减少,一直以为是再寻址写错了,改了,发现每啥用。后来把左移去掉发现冲突瞬间掉了,现在还没搞清楚为啥。 代码 /** * 利用hashCode进行查找 * * 借用一下网上的hash函数 * unsigned short high = 10086; * unsigend short low = 725; * while(i < lenth) * high = (high << 4) ^ (a * (i + lenth)); * low = (low << 3) ^ (a * (lenth - i)); * * return ((hight << 16) | low ) % size; * ps:经过测试,发现赋值给high和low并没有什么作用 * 而位移操作则会起到反作用,也就是说更好的hash函数应该是下面的 * unsigned short high = 0; * unsigend short low = 0; * while(i<lenth) * high = high ^ (a * (i + lenth)); * low = low ^ (a

并发编程—6ConcurrentHashMap1.7 & 1.8

隐身守侯 提交于 2019-12-26 20:41:47
目录 6 ConcurrentHashMap jdk1.7 6.1 预备知识 6.2 jdk1.7原理和实现 6.3 源码 6.3.1 构造方法 6.2.2 get方法 6.2.3 put方法 8.ConcurrentHashMap jdk1.8 8.1与1.7相比的重大变化 8.2 主要数据结构和关键变量 8.3sizeCtl: 8.4 源码 8.4.1 初始化做了什么事? 8.4.2 在get和put操作中,是如何快速定位元素放在哪个位置的? 8.4.3 扩容操作 6 ConcurrentHashMap jdk1.7 hash算法的介绍 构造方法做了什么 get方法做了什么 put方法做了什么 动态扩容逻辑 6.1 预备知识 hash算法: 就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。在jdk1.7为了使得hash出来的值更加均匀,在concurrentHashMap里面使用了Wang/Jenkins hash算法再做了一次hash。 HashMap和HashTable的缺陷: