首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP密码算法学习

PHP密码算法学习 不知道大家有没有看过 Laravel 源码。在 Laravel 源码中,对于用户密码加密,使用是 password_hash() 这个函数。...crypt() 函数也是一种单向函数,默认情况下是基于 UNIX DES 算法,这个函数盐值是可选参数,如果没有盐值的话,它会生成是一种简单弱密码,所以在 PHP5.6 之后如果 crypt(...查看密码函数加密算法 首先,我们还是看看当前环境中所支持 password_hash() 算法。...我们简单了解一下即可。 使用密码函数加密数据 重点还是在这个加密函数应用上,我们就来看看 password_hash() 这个函数使用。...algo 就是使用加密算法,前面我们已经看过当前系统中只有 2y 这一种算法,所以我们使用 PASSWORD_DEFAULT 这个默认算法也就只能是它了。

1.3K10

Django 使用 django-redis 作为缓存正确用法,别忽略缓存使用原则

Django 自身也有一套相对完善缓存系统,这篇文章来介绍一下使用 redis 作为 Django 缓存使用方法,并且说一下我在使用缓存过程中遇到问题。...$ redis-server 查看 redis $ redis-cli 使用 django-redis django-redis 是一个可以让 django 使用 redis 作为缓存存储第三方库,...", } } } django 缓存使用 视图函数中使用缓存 下面的代码表示将 my_view 这个视图函数缓存60*15秒,也就是15分钟,这个视图所能指向每个 url 都会单独创建一个缓存...函数中使用缓存 函数中使用缓存是最基本使用方法,跟在其他非 django使用方式一致,无非就是使用 set() 和 get() 方法。...模板中使用缓存 模板中使用缓存是我比较推荐一种缓存方式,因为使用这种方式可以充分考虑缓存颗粒度,细分颗粒度,可以保证只缓存那些适合使用缓存 HTML 片段。

3.6K10
您找到你想要的搜索结果了吗?
是的
没有找到

Django | 页面数据缓存使用

为什么要使用缓存? 一个动态网站基本权衡点就是,它是动态。 每次用户请求页面,服务器会重新计算。...从开销处理角度来看,这比你读取一个现成标准文件代价要昂贵使用缓存,将多用户访问时基本相同数据先缓存起来;这样当用户访问页面的时候,不需要重新计算数据,而是直接从缓存里读取,避免性能上开销...配置django缓存设置 settings.py中添加: CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache...": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } 使用Django内置缓存...如在django自带管理页面中,当模型发生修改时,会默认调用admin.ModelAdminsave_model 或 delete_model 方法。

1.8K40

如何使用列表实现一个O(1)时间复杂度LRU缓存算法

2.冲突 首先列表是作用于数组上,因为数组支持随机访问,所以能够达到O(1)时间复杂度,而列表本身就是要达到O(1)时间复杂度,可是如果冲突了怎么办呢?...当我们往列表中插入数据时,如果某个数据经过函数之后,存储位置已经被占用了,我们就从当前位置开始,依次往后查找,看是否有空闲位置,直到找到为止。...而如果取太低的话又会出现空间浪费,比如取0.5,实际上才一半就扩容了。 3.LRU缓存淘汰算法 什么是LRU缓存淘汰算法呢?...实际上我们可以有很多种解法来实现LRU缓存,但是题目中要达到时间复杂度为O(1),如果使用链表或者数组都是不能实现,这个时候就可以使用列表了,每次get时候如果存在此数据,那么我们就将它移动到链表尾部...使用自定义列表和自定义链表方案比较复杂实现图如下。 ?

1.2K41

mysql使用default给设置默认问题

add column会修改旧默认值 add column和modify column在default语义上处理不一样。...如果仅仅是修改某一个字段默认值,可以使用 alter table A alter column c set default 'c'; 用这种方式来替换modify,会省去重建表操作,只修改frm文件...下面插入数据 insert into test values(null,"张三",18,null); 此时我们发现num字段为插入null,而并不是我们设置默认值0 3....此时只插入name insert into test (name) values("李四"); 此时我们可以看到“李四”默认值变成了0。...结论:mysql 默认值只有在insert语句中没有这个字段时才会生效,如果insert中有插入该字段而该字段取值又为null,null值将被插入到表中,默认值此时失效。

51410

算法与数据结构(十二) (哈希)表创建与查找(Swift版)

列表创建就是将Value通过函数和处理key值冲突函数来生成一个key, 这个key就是Value查找映射,我们就可以通过key来访问Value值。...本篇博客我们就来好好聊一下列表实现,当然主要还是构建函数还有解决冲突函数,下方我们先给出函数为“除留取余法”和处理冲突线性探测发原理图,然后再给出面向对象实现,最后在给出相应代码实现...因为列表由于函数与处理冲突函数不同可以分为多种类型,但是每种类型之前区别除了函数和冲突函数不同之外,其他还是完全一致,因为我们使用是面向对象语言,所以我们可以将相同放在父类中实现,...因为函数有许多种,而处理冲突方法也有许多种,所以我们可以将其放到具体子类中去实现。不同类型列表中这两个方法给出具体函数和处理冲突方法。 ?...2.除留取余法与线性探测 接下来我们要给出函数为“除留取余法”以及使用线性探测方式来处理冲突列表。

1.6K100

使用 Django-cachalot 来缓存 query

今天介绍个小工具,Django插件—— https://github.com/BertrandBordage/django-cachalot (Django和抹香鲸?)。...一个遗留问题场景 话说很久很久之前,遇到过这样一个问题,当时还是在用django自带得admin做项目,新闻数据量很大,导致每次打开新闻列表页都非常慢,把Django上能用优化都用上之后好了些...怎么使用cachelot 上面说了些毫无营养联想,再来说说怎么使用,github上说很清楚了,使用相当简单: pip install django-cachalot #然后Djangoinstalls_app...这个是正常得缓存逻辑,那么如果数据进行了更改怎么处理呢,cachalot也对执行写数据库方法打了patch,在写时候根据语句对缓存进行删除。...对于小站点或许有用,比如我博客。但博客已经添加了view层缓存。或许可以参考cachalot来做些缓存策略上优化。

79420

django 三种缓存模式使用及注意点

Django 缓存模式使用(主要针对RestFul设计模式项目) 有三种模式: 全站使用缓存模式(整个项目每个接口都会使用缓存,缺点:所以接口都无法实时性获取数据) 单独视图缓存模式(单个接口使用缓存...'django.middleware.cache.FetchFromCacheMiddleware', ] 但是伴随缺点就是 没有设置 缓存接口默认都会有600秒缓存,如下 ?...无论清缓存还是换浏览器,因为缓存都是放在服务端。 这就导致 那些不需要设置缓存,要求数据实时性较高接口无法及时返回最新数据。  ...所以: 如果需要使用  from django.views.decorators.cache import cache_page, cache_control from django.views.decorators.vary...这种方式只针对一个接口使用缓存(个人倾向于使用此方式) 第三种: 涉及到模板使用(具体没有研究过): ?

49720

django 三种缓存模式使用及注意点

Django 缓存模式使用(主要针对RestFul设计模式项目) 有三种模式: 全站使用缓存模式(整个项目每个接口都会使用缓存,缺点:所以接口都无法实时性获取数据) 单独视图缓存模式(单个接口使用缓存...'django.middleware.cache.FetchFromCacheMiddleware', ] 但是伴随缺点就是 没有设置 缓存接口默认都会有600秒缓存,如下 ?...无论清缓存还是换浏览器,因为缓存都是放在服务端。 这就导致 那些不需要设置缓存,要求数据实时性较高接口无法及时返回最新数据。  ...所以: 如果需要使用  from django.views.decorators.cache import cache_page, cache_control from django.views.decorators.vary...这种方式只针对一个接口使用缓存(个人倾向于使用此方式) 第三种: 涉及到模板使用(具体没有研究过): ?

1.1K20

协同编辑中使用 OT 算法是什么

大家好,我是前端西瓜哥,今天我们来聊聊 OT 算法是什么。 OT 英文全称是 Operational transformation,是一种处理协同编辑算法。...谁最后修改,就全量使用修改,更早一些其他人修改会被丢弃。 用户自行处理冲突。...就像 git merge 导致冲突一样,会提示哪个地方被同时修改了,让合并者手动选择使用哪一个修改; 使用一致性算法。...一致性算法是最好选择,对用户最友好,不过带来了实现复杂。 一致性问题 我们先来看看不使用 OT 导致冲突问题。 假设用户 A 和用户 B 同时在编辑同一个文档,文档内容为 “12”。...使用 OT OT 算法可以解决一致性问题,我们来看看 OT 到底做了什么。 同样,原始内容是 “12”。

1.5K50

全网最全Python项目体系练习500例(附源代码),练完可就业

53.简述read、readline、readlines区别? 54.什么是Hash(函数)? 55.python函数重载机制?...read 读取整个文件 readline 读取下一行 readlines 读取整个文件到一个迭代器以供我们遍历 54.什么是Hash(函数)?...函数(英语:Hash function)又称算法、哈希函数,是一种从任何一种数据中创建小数字“指纹”方法。函数把消息或数据压缩成摘要,使得数据量变小,将数据格式固定下来。...该函数将数据打乱混合,重新创建一个叫做值(hash values,hash codes,hash sums,或hashes)指纹。...值通常用一个短随机字母和数字组成字符串来代表 55.python函数重载机制? 函数重载主要是为了解决两个问题。 1。可变参数类型。 2。可变参数个数。

1.3K20

JDK集合面试20问

HashMap内部实现原理是什么? HashMap内部实现原理是数组+链表,通过算法将key值列到数组中,如果到相同位置,则通过拉链法解决冲突。...在JDK8中新增了红黑树结构,当HashMap中冲突链表结构超过8个数据时,会从链表结构转换为红黑树结构。 2....HashMap使用场景很多,这个使用场景就太多了,比如用作本地缓存。...LinkedHashMap因为它链表结构可以实现LRU(最近最少使用),即缓存空间有限,当元素多余缓存空间,可淘汰掉最近最少使用元素。...所以当要实现LRU缓存时,就可以将accessOrder设置为true实现。 TreeMap没有实际应用过,如果有需要排序场景则使用TreeMap Set 10.

54840

数据结构与算法-列表

应该将不同输入映射到不同数字。例如, 如果一个函数不管输入是什么都返回 1,它就不是好函数。最理想情况是,将不同输入映射到不同数字。...『缓存是一种常用加速方式,所有大型网站都使用缓存,而缓存数据则存储在列表中!』 ? # 创建一个手机薄 # 添加联系人及其电话号码。通过输入联系人来获悉其电话号码。...因此在使用列表时,避开最糟情况至关重要。为此,需要避免冲突。避免冲突几个指标是: 较低填装因子:填装因子 = 列表包含元素数/位置总数 ? 良好函数:让数组中值呈均匀分布。 ?...冲突很糟糕,应使用可以最大限度减少冲突函数。 列表查找、插入和删除速度都非常快。 列表适合用于模拟映射关系。 一旦填装因子超过 0.7,就该调整列表长度。...列表可用于缓存数据(例如,在Web服务器上)。 列表非常适合用于防止重复。 参考资料: 图解算法

59030

程序员修仙之路--把用户访问记录优化到极致

我们可以反证一下,如果这个公式成立,我计算无限个Key值,那列表底层数组必须做到无限大才行。像业界比较著名MD5、SHA等哈希算法,也无法完全避免这样冲突。...再法 这种方式本质上是计算多次值,那就必然需要多个函数,在产生冲突时再使用另一个函数计算值,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。 4....但是无论是什么,想要保证列表优点还是需要慎重考虑这个容器选择。 ? 扩展阅读 1....拉链方式实现链表中,其实我更倾向于使用双向链表,这样在删除一个元素时候,双向链表优势可以同时发挥出来,这样可以把列表删除元素时间复杂度降低为O(1)。 6....●程序猿修仙之路--算法之希尔排序! ●程序员修仙之路--算法之插入排序! ●程序员修仙之路--算法之选择排序! 互联网之路,菜菜与君一同成长 听说转发文章 会给你带来好运

58830

数据结构与算法-列表

应该将不同输入映射到不同数字。例如, 如果一个函数不管输入是什么都返回 1,它就不是好函数。最理想情况是,将不同输入映射到不同数字。...『缓存是一种常用加速方式,所有大型网站都使用缓存,而缓存数据则存储在列表中!』 ? # 创建一个手机薄 # 添加联系人及其电话号码。通过输入联系人来获悉其电话号码。...因此在使用列表时,避开最糟情况至关重要。为此,需要避免冲突。避免冲突几个指标是: 较低填装因子:填装因子 = 列表包含元素数/位置总数 ? 良好函数:让数组中值呈均匀分布。 ?...冲突很糟糕,应使用可以最大限度减少冲突函数。 列表查找、插入和删除速度都非常快。 列表适合用于模拟映射关系。 一旦填装因子超过 0.7,就该调整列表长度。...列表可用于缓存数据(例如,在Web服务器上)。 列表非常适合用于防止重复。 参考资料: 图解算法 ---- ---- ---- ----

65820

HashMap、LRU、列表

least recentlly use 最少最近使用算法,就是使用LinkedHashMap 会将内存控制在一定大小内, 这个最大值可以自己定,超出最大值时会自动回收。...他内部是是一个LinkedHashMap存储外界缓存对象,提供了get,put方法来操作,当缓存满了,lru会移除较早使用缓存对象,把新添加进来。...调用put插入新对象也是存储在链表尾端,这样当内存缓存达到设定最大值时,将链表头部对象(近期最少用到)移除。 内存中使用LRUCache是最合适。...这个要求看起来合情合理,但是在真实情况下,要想找到一个不同 key 对应值都不一样函数,几乎是不可能。即便像业界著名MD5、SHA、CRC等哈希算法,也无法完全避免这种冲突。...对于查询操作,为了兼容了新、老列表中数据,我们先从新列表中查找,如果没有找到,再去老列表中查找。 部分内容摘抄至极客时间《数据结构与算法之美》

1K51

这次妥妥地拿下列表---基础、如何设计以及扩展使用(LRU)

函数 函数是这样函数,无论它输入是什么,它输出都是一个数字。用专业术语来表示的话,函数将输入映射为数字。这个数字可以作为数组索引,用来确定元素存储位置。...列表和链表联用 前段时间在看 Linux 内核源码时候,有时候会看到列表和链表联合使用列表用来快速查找,而链表则使用 LRU 算法来维护(比如可查看文件系统缓存这一块内容)。...那么接下来我们来看一下为什么将它们放在一起使用?以及列表和链表联用是什么? 在单纯使用链表实现 LRU 缓存淘汰算法时,我们是按照时间先后(最新访问算是后)来维护链表结构。...因为查询数据时候需要遍历链表,所以单纯使用单链表方式实现 LRU 缓存淘汰算法时间复杂度为 O(n)。...因此,上述三个操作时间复杂度都是 O(1)。因此,将列表和双向链表结合可以实现一个高效、支持 LRU 缓存淘汰算法缓存系统模型。 3.1.

67120

图解一致性hash算法和实现

一致性hash算法是什么? 一致性hash算法,是麻省理工学院1997年提出一种算法,目前主要应用于分布式缓存当中。...计算方法:假设节点hash均匀(由于hash是列表,所以并不是很理想),采用一致性hash算法缓存节点从3个增加到4个时,会有0-33%缓存失效,此外新增节点不会环节所有原有节点压力。...使用一致性hash算法+虚拟节点这种情况下,缓存节点从3个变成4个,缓存失效率为25%,而且每个节点都平均承担了压力。...一致性hash算法+虚拟节点实现 原理理解了,实现并不难,主要是一些细节: hash算法选择。Java代码不要使用hashcode函数,这个函数结果不够,而且会有负值需要处理。...这种计算Hash值算法有很多,比如CRC32_HASH、FNV1_32_HASH、KETAMA_HASH等,其中KETAMA_HASH是默认MemCache推荐一致性Hash算法,用别的Hash算法也可以

64840

算法图解(五)|列表与字典

列表 算法图解第五章内容学习笔记 5.1 函数 特点:无论输入是什么数据,函数都输出一个数字。用专业术语来说明,函数“将输入映射到数字”。 ? 函数将输入映射为数字,这有何用途呢?...5.2 应用案例 (1) 将列表用于查找 电话号码查找,给一个名字,输出他号码。 (2)防止重复(投票时防止重复投票) ? (3)将列表用作缓存 ?...然而,如果使用函数很好,这些链表就不会很长! 5.4 性能 列表性能常数级别复杂度: ?...因此,在使用列表时,避开最糟情况至关重要。为此,需要避免冲突。而要避免冲突,需要有: (1)较低填装因子; (2)良好函数。...(4)使用可以最大限度减少冲突函数避免冲突。 (5)列表适合用于模拟映射关系,可用于缓存数据、防止重复。 《算法图解》第五章列表(字典)学习笔记,下一章“广度优先搜索”

1.2K10

JAVA面试题之四——Redis 中缓存清空策略 LRU 说一下?

因为查找数据需要遍历链表,所以单纯用链表实现 LRU 缓存淘汰算法时间复杂很高,是 O(n)。...方案二:使用数组实现 LRU 思路:数组首位保存最新访问数据、末位置优先被清理 如果此数据之前已经被缓存在数组中了,找到对应数据将其插入到首位,并从原位置删除,插入到首位需要移动剩余所有数据,时间复杂度...O(N); 如果此数据没有在数组中,分两种情况:如果此时缓存未满,则将节点直接插入到数组首位;如果此时缓存已经满了,则删除末尾节点,将新数据插入到首位,时间复杂度O(N) 方案三:使用列表优化第一种方法...列表是什么?...查找数据:列表查找数据时间复杂度接近 O(1),如果存在冲突,时间复杂度会上升。 删除数据:找到数据所在节点,然后将其删除。删除时间复杂度为O(1)。

72020
领券