如何为郑州市建设网选择最佳的网站建设服务器?
摘要:网站建设服务器的选择方案,郑州市建设网官网,龙游发布紧急提示,网站开发接单Redis的使用场景 根据自己简历上的业务进行回答 缓存 穿透、击穿、雪崩、双写一致、持久化、数据过期、淘汰策略 分布式锁 setnx redisson 缓存穿透&a
网站建设服务器的选择方案,郑州市建设网官网,龙游发布紧急提示,网站开发接单Redis的使用场景 根据自己简历上的业务进行回答 缓存 穿透、击穿、雪崩、双写一致、持久化、数据过期、淘汰策略 分布式锁 setnx redisson
缓存穿透#xff1a;查询一个不存在的数据#xff0c;数据库查不到数据也不会直接写入缓存#xff0c;就会导致每次请求都查询数据库…Redis的使用场景 根据自己简历上的业务进行回答 缓存 穿透、击穿、雪崩、双写一致、持久化、数据过期、淘汰策略 分布式锁 setnx redisson
缓存穿透查询一个不存在的数据数据库查不到数据也不会直接写入缓存就会导致每次请求都查询数据库一般都是恶意攻击。 解决方案1、缓存不存在的数据这会消耗内存 2、使用布隆过滤器redis中的一种数据结构 bitmap 位图结构对它先进行预热多次hash算法当key不存在一定不存在当key存在可能不存在会存在一定的误判误判率可以设置为5%。
缓存击穿当缓存中的key刚好过期恰好这时间对这个key有大量的并发请求过来这些请求可能会瞬间把DB压垮。 解决方案1、互斥锁强一致性性能差 2、对热点数据不设置过期时间
缓存雪崩同一时段大量的缓存key同时失效或者Redis宕机导致大量请求到数据库。 解决方案1、给不同的Key的过期时间添加随机值 2、利用Redis集群提高服务的可用性 3、给缓存业务添加降级限流策略
双写一致针对高并发 解决方案1、强一致性可以采用redisson读写锁来保证数据的同步在读的时候添加读锁可以保证读读不互斥读写互斥。当更新数据的时候添加排它锁读读和读写都互斥。 2、最终一致性可以采用MQ中间件更新数据之后通知缓存删除
持久化 1、RDB一个快照文件bgsave的命令通过fork一个子进程把内存存储的数据写到磁盘上采用copy on write 的策略不影响主线程的写操作避免了子线程无意义的复制。 2、AOF: 追加文件当redis操作写命令时都会存储在这个文件中。 哪种方式恢复比较快 RDB因为是二进制文件保存的体积比较小恢复速度比较快但它有可能丢失数据。 AOF虽然恢复的速度慢一些但是它丢数据的风险要小很多在设置刷盘策略可以设置每秒批量写入一次命令
Redis过期删除策略
惰性删除设置该key过期时间后不去管它当需要该key时会检查是否过期如果过期就删掉它反之返回该key
优点对CPU友好只有使用才检查key是否过期。 缺点对内存不友好过期的key一直没有使用会一直存在内存中
定期删除每隔一段时间对key进行检查删除里面过期的key抽取一定数量的key进行检查并删除其中的key SLOW模式和FAST模式
优点有效释放的过期key占用的内存 缺点 难以确定删除操作执行的时长和频率
过期删除策略惰性删除 定期删除两种策略配合使用
淘汰策略 数据的淘汰策略:当Redis中的内存不够用时此时在向Redis中添加新的key那么Redis就会按照某一种规则将内存中的数据删除掉这种数据的删除规则被称之为内存的淘汰策略。
Redis支持8种不同策略来选择要删除的key:
noeviction: 不淘汰任何key但是内存满时不允许写入新数据默认就是这种策略volatile-ttl: 对设置了TTL的key比较key的剩余TTL值TTL越小越先被淘汰 allkeys-random:对全体key 随机进行淘汰。 volatile-random:对设置了TTL的key 随机进行淘汰。 allkeys-lru: 对全体key基于LRU算法进行淘汰 volatile-lru:对设置了TTL的key基于LRU算法进行淘汰 allkeys-lfu: 对全体key基于LFU算法进行淘汰 volatile-lfu:对设置了TTL的key基于LFU算法进行淘汰
LRU (Least Recently Used) 最近最少使用。用当前时间减去最后一次访问时间这个值越大则淘汰优先级越高。 LFU(Least Frequently Used) 最少频率使用。会统计每个key的方问频率值越小淘汰优先级越高。
分布式锁 使用场景定时任务、抢单、幂等性场景
如何实现 在redis中提供了一个命令setnx(SET if not exists) 由于redis是单线程的用了命令之后只有一个客户端对某一个key设置值在没有过期或删除key的时候其它客户端是不能设置这个key的。
如何控制Redis实现分布式锁有效时长 采用框架redisson实现的。
