NoSQL
文章平均质量分 74
代元培
听风看雨 见贤思齐 抚霜踏雪 青云直上
展开
-
布隆过滤器
一、介绍 布隆过滤器是一个二进制数组,它的作用是判断一个数是否存在于这个数组,0表示不存在,1表示存在,如下图所示: 二、添加 如果要存入“你好”这个字符串,首先会经过n个哈希函数计算,会计算出不同的哈希值,然后将这几个哈希值映射到数组中,对应的位置的二进制数被修改为1,如下图所示: 下标为3、5、7的位置被修改成了1 三、查询 比如说查询“你好”这个字符串,首先通过n个哈希函数计算出对应的数组位置是3、5、7,这三个位置的二进制数...原创 2021-07-06 16:47:57 · 142 阅读 · 0 评论 -
Redis缓存预热&雪崩&击穿&穿透
目录 1、缓存预热 2、缓存雪崩 3、缓存击穿 4、缓存穿透 1、缓存预热 场景: 服务器启动后迅速宕机 问题排查: 1、请求数量较高,大量的请求过来之后都要从缓存中获取数据,但是缓存中又没有,从数据库中查找数据后将数据再存入缓存,造成了短期内对redis的高强度操作 2、主从之间数据吞吐量较大,数据同步操作频度较高 解决方案: 为了防止用户访问的时候Redis中没有数据,所以提前将热点数...原创 2021-07-06 16:20:00 · 189 阅读 · 0 评论 -
浅谈redis的setnx
在Redis里,所谓SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到SETNX有陷阱! 比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效应,如果有锁机制,那么就可以控制只有一个请求去更新缓存,其它的请求视情况要么等待,要么使用过期的缓存。 下面以目...原创 2021-05-19 16:15:33 · 2388 阅读 · 0 评论 -
正确使用Redis的setnx实现锁机制
setNX,是set if not exists的缩写,也就是只有不存在的时候才设置,设置成功时返回1,设置失败时返回0。可以利用它来实现锁的效果,但是很多人在使用的过程中都有一些问题没有考虑到。 例如某个查询数据库的接口因为请求量比较大所以加了缓存,并设定缓存过期后刷新。当并发量比较大并且缓存过期的瞬间,大量并发请求会直接查询数据库导致雪崩。如果使用锁机制来控制只有一个请求去更新缓存就能避免雪崩的问题。下面是很多人下意识想到的加锁方法$rs = $redis->setNX($k...原创 2021-05-19 16:00:11 · 666 阅读 · 0 评论 -
redis和memcacahe、mongoDB的区别
都是非关系型数据库,性能都非常高,但是mongoDB和memcache、redis是不同的两种类型。后两者主要用于数据的缓存,前者主要用在查询和储存大数据方面,是最接近数据库的文档型的非关系数据库。从数据存储位置上来分,memcache的数据存在内存中,而redis既可以存储在内存中,也可以存储的到磁盘中,达到持久化存储的功能,memcache一旦断电,数据全部丢失,redis可以利用快照和AOF把数据存到磁盘中,当恢复时又从磁盘中读取到内存中,当物理内存使用完毕后,可以把数据写入到磁盘中。从存储数原创 2020-09-11 17:56:19 · 155 阅读 · 0 评论