代理做网站,某电子商务网站建设的详细策划,wordpress注册页面美化,贵州省交通建设工程质量监督局网站1.什么是缓存穿透#xff0c;什么是缓存雪崩#xff0c;什么是缓存击穿#xff1f;
缓存穿透:假如某一时刻访问redis的大量key都在redis中不存在(比如黑客故意伪造一些乱七八糟的key)#xff0c;那么也会给数据造成压力#xff0c;这就是缓存穿透#xff0c;解决方案是使…1.什么是缓存穿透什么是缓存雪崩什么是缓存击穿
缓存穿透:假如某一时刻访问redis的大量key都在redis中不存在(比如黑客故意伪造一些乱七八糟的key)那么也会给数据造成压力这就是缓存穿透解决方案是使用布隆过滤器它的作用就是如果它认为一个key不存在那么这个key就肯定不存在所以可以在缓存之前加一层布隆过滤器来拦截不存在的key
缓存击穿:和缓存雪崩类似缓存雪崩是大批热点数据失效而缓存击穿是指某一个热点key突然失效也导致了大量请求直接访问Mysql数据库这就是缓存击穿解决方案就是考虑这个热点key不设过期时间
缓存雪崩:如果缓存中某一时刻大批热点数据同时过期那么就可能导致大量请求直接访问Mysql了解决办法就是在过期时间上增加一点随机值另外如果搭建一个高可用的Redis集群也是防止缓存雪崩的有效手段
2.redis怎么设置key的过期时间
1分开设置
// 两条命令分别设置值和过期时间 // 时间单位秒 redis.expire(key,6); // 时间单位毫秒 //redis.pexpire(key,6000L)
2合并设置
一条命令同时设置值和过期时间推荐使用此方式。 // 一条语句设置值和过期时间 // 时间单位秒 redis.setex(key,6,value); // 时间单位毫秒 //redis.psetex(key,6000L,value)
3.redis怎么删除过期时间
1定期删除
当放入数据后设置一个定时器当定时器读秒完毕后将对应的数据从dict中删除。
优点 内存友好数据一旦过期就会被删除 缺点 CPU不友好定时器耗费CPU资源并且频繁的执行清理操作也会耗费CPU资源。
用时间换空间
定期删除可以通过第一、配置redis.conf 的hz选项默认为10 即1秒执行10次100ms一次值越大说明刷新频率越快最Redis性能损耗也越大 第二、配置redis.conf的maxmemory最大值当已用内存超过maxmemory限定时就会触发主动清理策略
2懒汉式删除
当数据过期的时候不做任何操作。当访问数据的时候查看数据是否过期如果过期返回null并且将数据从内存中清除。如果没过期就直接返回数据。
优点 CPU友好数据等到过期并且被访问的时候才会删除。 缺点 内存不友好会占用大量内存。
4.redis为什么读取速度比较快
(一)纯内存操作避免大量访问数据库减少直接读取磁盘数据redis将数据储存在内存里面读写数据的时候都不会受到硬盘 I/O 速度的限制所以速度快
(二)单线程操作避免了不必要的上下文切换和竞争条件也不存在多进程或者多线程导致的切换而消耗CPU不用去考虑各种锁的问题不存在加锁释放锁操作没有因为可能出现死锁而导致的性能消耗
(三)采用了非阻塞I/O多路复用机制 用户首先将需要进行IO操作的socket添加到select中然后阻塞等待select系统调用返回。当数据到达时socket被激活select函数返回。用户线程正式发起read请求读取数据并继续执行。这样用户可以注册多个socket然后不断地调用select读取被激活的socketredis服务端将这些socke置于队列中然后文件事件分派器依次去队列中取转发到不同的事件处理器中提高读取效率。