什么是Redis缓存穿透?redis面试题及答案(附面试题大全)

Java-Redis缓存穿透、缓存击穿及缓存雪崩(配解决方案及代码示例) 在现代高并发的互联网应用中,缓存技术已成为提升系统响应速度与减轻后端数据库压力的关键手段。Redis,以其卓越的性能和丰富的数据结构,成为众多开发者构建缓存层的首选。然而,随着业务复杂度的增加,Redis缓存层也可能遭遇“缓存穿透”、“缓存击穿”以及“缓存雪崩”等现象,这些情况不仅影响系统的稳定性和响应时间,还可能直接导致服务的不可用。本文旨在深入剖析这三种缓存异常现象,探讨其背后的原理,并提出有效的预防策略。 阅读详情

一、缓存雪崩

为什么使用缓存?

1.提高性能:缓存查询速度比数据库查询速度快(内存vs硬盘)。

2.提高并发能力:缓存分担了部分请求,支持更高的并发。

redis存储的数据和内存占用是有限的,因此我们才需要对数据设置过期时间,并采用惰性删除+定期删除策略清除过期键,释放内存。如果数据缓存的过期时间是相同的,redis正好把这部分数据清掉或者redis服务器出现故障,缓存失效请求全部走数据库,这种现象就是缓存雪崩。缓存雪崩可能导致数据库被搞垮,导致整个系统直接崩溃。

如何解决缓存雪崩?

数据预热,通过缓存reload机制,提前更新缓存,在发生大并发访问之前,手动触发加载缓存不同的key,设置过期时间加上随机数值,让key过期时间分散开来。

redis挂掉情况:使用redis高可用架构(主从架构+sentinel或redis cluster),保证个别节点或者机器宕掉依然能继续提供服务。

当缓存失效后,依赖隔离组件为后端限流降级(hystrix),采用加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

二、缓存穿透

当查询一个一定不存在的数据,由于缓存不命中,去查询数据库也无法查询出结果,因此不会写入到缓存中,这会导致每个查询都去请求数据库,造成缓存穿透。

解决方案:

布隆过滤对所有的可能查询的参数以hash形式存储,在控制器层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力。bloomfilter就类似于一个hash set,用于快速判某个元素是否存在于集合中,其典型的应用场景就是快速判断一个key是否存在于某容器,不存在就直接返回。举例:将真实正确Id在添加完成之后便加入到过滤器当中,每次再进行查询时,先确认要查询的Id是否在过滤器中,如果不在,则说明Id为非法Id。

缓存空对象当从数据库查询不到值,就把参数和控制缓存起来,设置一个简短的过期时间(因为缓存是需要内存的,如果有过多空值key,占用内存多),在该时间段如果有携带此参数再次请求,就可以直接返回。可能导致该段时间缓存层和数据库数据不一致,对于需要保持一致性的业务有影响。

三、缓存并发

高并发场景下同时查询大量查询过期的key值,最后查询数据库将缓存结果写到缓存、造成数据库压力过大。

解决方案:互斥锁 对锁不了解的可以查看初始锁的世界文章。

四、缓存和数据库双写一致性

数据库与缓存读写模式策略

写完数据库后是否需要马上更新缓存还是直接删除缓存?

如果数据库更新值和更新到缓存是一样的无需经过任何的计算,可以立即更新缓存,如果写多读少的场景也不适合这种方案。

如果数据保存缓存需要复杂的关联计算,无需立即更新缓存,等查询的时候在进行更新。

一般的策略是当更新数据时,先删除缓存,再更新数据库,而不是更新缓存,等要查询的时候才把最新的数据更新到缓存。

常见数据库与缓存双写情况导致数据不一致的场景和解决方案。

场景一:用户原来有50块,购买了一条毛巾20,要更新余额为30,数据库更新为30,删除缓存但是失败了。意味着数据库是30,而缓存还是50,这导致数据库和缓存不一致解决方案:先删除缓存,如果删除成功再去更新数据库,就算数据库更新失败了,再次读取数据库缓存到redis数据还是一致的。

场景二:高并发的情况下,如果A删除完缓存,A在去更新数据库,在更新的过程后,B来查询数据,发现缓存没有,就从数据库获取并缓存,后面A更新成功,就会出现缓存和数据库不一致。解决方案:使用队列,购票场景,更新车票库存,先把票id丢到队列里去,当更新完后在从队列里去除,在更新票数的过程中,如果有查票库存请求先去缓存里看下有没有数据,如果没有,可以先去队列里看是否有用户在做更新,如果有也把查票库存请求发送到队列里去,然后同步等待缓存更新完成。如果发现队列里有一个查询请求了,那么就不要放新的查询操作进去了,用一个while(true)循环去查询缓存,循环个200MS左右,如果缓存里还没有则直接取数据库的旧数据。高并发解决注意点: 1.读请求时间堵塞 读请求进行非常轻度的异步化,每个读请求必须在超时间内返回,该方案最大的风险在于可能数据更新很频繁,导致队列中挤压了大量的更新操作在里面,然后读请求会发生大量的超时,导致大量的请求直接走数据库,像遇到这种情况,一般要做好足够的压力测试,如果压力过大,需要根据实际情况添加机器。 2.请求并发量过高 压力测试要做好,模拟各种真实场景,并发量在最高的时候QPS多少,如何扛不住可以多加机器,同时读写服务器比例要设置好。 3. 多服务实例部署的请求路由 服务部署了多个实例,要保证执行数据更新操作和执行缓存更新操作的请求都通过nginx服务器路由到相同的服务器实例上。 4.热点数据的路由问题,导致请求 读热点数据的请求非常高,全部发给同一机器的同一队列里,造成该服务器压力过大,因为只能更新数据才会清空缓存,才会导致读写并发。

保证数据一致的方案:

1. databus

Databus是一个低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统。由LinkedIn于2013年开源。Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更并进行其他业务逻辑。搭建过程简述:下载ojdbc6.jar然后复制放在
sandbox-repo/com/oracle/ojdbc6/11.2.0.2.0/,然后重命名ojdbc6-11.2.0.2.0.jar,构建需要gradle支持。

2. 阿里的canal监听binglog进行更新。

canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。

如何使用redis做一个消息队列?

redis知识查缺补漏---面试题

一个字符串类型的值能存储最大容量是521M。

为什么redis需要把所有数据放在内存中?为了达到最大的读写速度将数据都读到内存中,并通过异步方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度会严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

Redis支持的数据类型?String字符串:格式: set key valuestring类型是二进制安全的。redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。常规key-value缓存应用;常规计数:微博数,粉丝数等。string类型是Redis最基本的数据类型,一个键最大能存储512MB。 Hash(哈希)格式: hmset name key1 value1 key2 value2Redis hash 是一个键值(key=>value)对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 List(列表)Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)格式: lpush name value在 key 对应 list 的头部添加字符串元素格式: rpush name value在 key 对应 list 的尾部添加字符串元素格式: lrem count value在key对应 list 中删除 count 个和 value 相同的元素格式: llen name 返回 key 对应 list 的长度使用场景:微博的关注列表,粉丝列表,消息列表等功能都可以用Redis的 list 结构来实现。 Set(集合)格式: sadd name valueRedis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。比如:在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。 zset(sorted set:有序集合)格式: zadd name score valueRedis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。场景:在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 SortedSet 结构进行存储。

Redis集群方案什么情况下会导致整个集群不可用?有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用。

Redis支持的Java客户端都有哪些?官方推荐用哪个?Redisson、Jedis、lettuce等等,官方推荐使用Redisson。

redis和redisson有什么关系?Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)。

Jedis与Redisson对比有什么优缺点?Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让开发者能够将精力更集中地放在处理业务逻辑上。

redis有哪些架构?各自的特点?单机版

特点:简单

缺点: 内存容量有限 处理能力有限 无法高可用

主从复制

Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。

特点:master/slave角色 master/slave数据相同 降低master读压力转交salve分担。

缺点:无法保证高可用 没有解决 master写的压力

哨兵模式:

Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:

监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。

特点:保证高可用 监控各个节点 自动故障迁移

缺点:主从模式切换需要时间可能会丢数据 没有解决master写的压力。

集群(proxy)型

Twemproxy是一个 Twitter 开源的一个 redis 和 memcache 快速/轻量级代理服务器;Twemproxy是一个快速的单线程代理程序,支持 Memcached ASCII 协议和 redis 协议。

特点:多种hash算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins 支持失败节点自动删除 后端sharding分片逻辑对业务透明,业务方的读写方式和操作单个redis一致。

缺点:增加了新的proxy,需要维护其高可用 failover 逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预。

集群直连型:

从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

特点: 1.无中心架构(不存在哪个节点影响性能瓶颈),少了 proxy 层。

2.数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布

3.可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。

4.高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本

5.实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave到 Master 的角色提升。

缺点:资源隔离性较差,容易出现相互影响的情况和数据通过异步复制,不保证数据的强一致性。

9.redis集群如何选择数据库?

redis集群目前无法做数据库选择,默认在0数据库。

10. redis集群之间如何复制的?最大节点个数是多少?

异步复制 16384个

11. redis 内存如何做优化?

能用散列表存储就优先选择,占用的内存小。如果要保持用户的基本信息,直接用散列保存,不要为每个属性单独设key。

12.redis回收使用的是什么算法?

LRU算法

13.redis回收进程如何工作的?

一个客户端运行了新的命令,添加了新的数据。

Redis检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。

一个新的命令被执行,等等。

所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。

如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

14.redis如何做大量数据插入?

redis2.6开始redis-cli支持pipe model模式,提供大量数据的插入。

15.redis为什么要分区?

分区可以让redis管理更大的内存,redis将可以使用所有机器的内存。如果没有分区,最多只能使用一台机器的内存。分区使redis的计算能力通过简单地增加计算机得到成倍提升,redis的网络带宽也会随着计算机和网卡的增加而成倍增长。

16.redis分区方案有哪些?

客户端分区:在客户端已经决定数据会被存储到哪个redis节点或者从哪个redis节点读取。大多数客户端已经实现了客户端分区。

代理分区:客户端将请求发送给代理,然后代理决定去哪个节点写数据或者读数据。代理根据分区规则决定请求哪些redis实例,然后根据redis的响应结果返回客户端。redis和memcache的一种代理实现就是twemproxy。

查询路由(query routing):客户端随机地请求任意一个redis实例,然后由redis将请求转发给正确的redis节点。redis cluster实现了一个混合形式的查询路由,并不是直接将请求从一个redis节点转发到另一个redis节点,而是在客户端的帮助下直接redirected到正确的节点。

17.redis分区有什么缺点?

涉及多个key的操作通常不会被支持。如不能直接使用交集指令对俩个集合求交集,因为集合存储的redis实例可能不同。

操作多个key不能使用redis事务。

分区使用的粒度是key,不能使用一个非常长的排序key存储一个数据集。(The partitioning granularity is the key, so it is not possible to shard a dataset with a single huge key like a very big sorted set.)

当使用分区的时候,数据处理会非常复杂。例如为了备份必须从不同的redis实例和主机同时收集rdb/apf文件。

分区时动态扩容或缩容可能非常复杂。redis集群在运行时增加或者删除redis节点,能做到最大程度对用户透明地数据再平衡,但其他一些客户端分区或者代理分区则不支持这种特性,可以使用预分片技术来解决。

18.redis持久化数据和缓存如何做扩容?

如果Redis被当做缓存使用,使用一致性哈希实现动态扩容缩容。

如果Redis被当做一个持久化存储使用,必须使用固定的keys-to-nodes映射关系,节点的数量一旦确定不能变化。否则的话(即Redis节点需要动态变化的情况),必须使用可以在运行时进行数据再平衡的一套系统,而当前只有Redis集群可以做到这样。

19.分布式redis是前期做还是后期规模上来再做?为什么?

Redis是如此的轻量(单实例只使用1M内存),为防止以后的扩容,最好就是一开始就启动较多实例。即便你只有一台服务器,一开始就让Redis以分布式的方式运行,使用分区,在同一台服务器上启动多个实例。

一开始就多设置几个Redis实例,例如32或者64个实例,对大多数用户来说这操作起来可能比较麻烦,但是从长久来看做这点牺牲是值得的。

当你的数据不断增长,需要更多的Redis服务器时,你需要做的就是仅仅将Redis实例从一台服务迁移到另外一台服务器而已(而不用考虑重新分区的问题)。一旦你添加了另一台服务器,你需要将你一半的Redis实例从第一台机器迁移到第二台机器。

20.Twemproxy是什么?

Twemproxy是Twitter维护的(缓存)代理系统,代理Memcached的ASCII协议和Redis协议。它是单线程程序,使用c语言编写,运行起来非常快。它是采用Apache 2.0 license的开源软件。Twemproxy支持自动分区,如果其代理的其中一个Redis节点不可用时,会自动将该节点排除(这将改变原来的keys-instances的映射关系,所以你应该仅在把Redis当缓存时使用Twemproxy)。Twemproxy本身不存在单点问题,因为你可以启动多个Twemproxy实例,然后让你的客户端去连接任意一个Twemproxy实例。Twemproxy是Redis客户端和服务器端的一个中间层,由它来处理分区功能应该不算复杂,并且应该算比较可靠的。

21.支持一致性哈希的客户端有哪些?

redis-rb predis

22.redis是单线程的,如何提高多核cpu的利用率?

可以在同一个服务器部署多个redis的实例,当成不同的服务器来使用。在某些时候,无论如何一个服务器是不够的,所以你想使用多个cpu,可以考虑分片(shard)。

23.一个redis实例最多能存放多少的keys?list、set、sorted set最多能存放多少元素?

一个redis至少能存2亿5千万的keys。任何list、set、sorted set都可以存放232个元素。redis的存储极限主要还是取决于系统的可用内存值。

24.redis常见性能问题和解决方案?

(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次。

(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。

(4) 尽量避免在压力很大的主库上增加从库。

(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

25.redis如何实现延迟任务?

我们知道zset本质就是set结构上加了排序功能,当添加或者修改元素,会按照score值进行排序。如果score代表是执行时间的时间戳,某个时间加入到zset集合中就会排序,然后写一个死循环不断取第一个key值,如果当前时间戳大于key的时间戳就取出来消费删除,这样就可以执行延迟任务的目的,而且不需要遍历整个zset,造成性能浪费。

本文主要介绍了redis一些比较经典的面试题,通过这些题目有助于大家更好的理解redis。还有更多java面试学习资料。

努力不一定有结果,但是不努力一定不会有结果。

【精选】30+Redis面试题整理(2024)附答案 自用redis面试圣经,记录了个人面试中经常问到的面试题、收集了网络热门面试题。 阅读详情

相关推荐

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

睶 38万+

java-redis-穿透

缓存穿透是 Redis 缓存系统中的一个常见问题,它会导致大量请求绕过缓存直接访问数据库,给数据库带来巨大的压力。**缓存空值**:将数据库中不存在的值缓存起来,防止重复查询。2.布隆过滤器:在查询缓存和数据库之前,利用布隆过滤器判断请求是否合法,从而减少不必要的数据库查询。3.参数校验:在应用层进行参数合法性校验,直接拦截明显非法的请求。

Flying_Fish_roe的博客 1438

【2021最新版】Redis面试题总结(50道题含答案解析)

文章目录1、什么是Redis?2、Redis与其他key-value存储有什么不同?3、Redis的数据类型?4、使用Redis有哪些好处?5、Redis相比Memcached有哪些优势?6、Memcache与Redis的区别都有哪些?7、Redis是单进程单线程的?8、一个字符串类型的值能存储最大容量是多少?9、Redis持久化机制。10、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题11、热点数据和冷数据是什么?12、单线程的redis为什么这么快?13、redis的数据类型,以及每种数据类型的

程序媛小琬的博客 1万+

Java-Redis缓存穿透,击穿,雪崩和布隆算法

假设一个客户端 一个tomcat 一个redis(里面有一条热门数据 时间期限为1天) mysql1天之内 是客户端---- tomcat ----redis1天之后 客户端----tomcat----mysql 这种情况就叫缓存击穿总结: redis中只有一条有效数据,当过了这个时间,tomcat就穿过redis,直接访问数据库,这个就叫缓存击穿缓存击穿和缓存穿透的区别:缓存击穿是缓存穿透的一种特殊表现形式。

搬着砖,敲着代码的博客 1027

Redis面试大全及答案

答:集群脑裂是由于主节点和从节点和sentinel处于不同的网络分区,使得sentinel没有能够心跳感知到主节点,所以通过选举的方式提升了一个从节点为主,这样就存在了两个master,这样会导致客户端还在老的主节点那里写入数据,新节点无法同步数据,当网络恢复后,sentinel会将老的主节点降为从节点,这时再从新master同步数据,就会导致数据丢失。解决方法一:缓存失效时先使用redis的setnx去设置一个互斥锁,成功去load db并回设缓存,否则重试get缓存的方法(强一致,性能差)

YY20021019的博客 1735

redis面试题收集和整理 (附答案)

最近有一些小伙伴面试,对自己回答redis的问题结果比较不满意,这里收集了网上常见的面试题并做了整理,部分答案加入了自己的看法和思路,希望可以帮助到大家 1、什么是redis redis本质上是一个Key-Value类型的内存数据库,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(s...

程序猿老王的博客 2398

【Redis】redis缓存击穿,缓存雪崩,缓存穿透

缓存就是与数据交互中的缓冲区,它一般存储在内存中且读写效率高,提高响应时间提高并发性能,如果访问数据的话可以先访问缓存,避免数据查询直接操作数据库,造成后端压力过大。但是可能会面临数据不一致问题,比如访问数据时拿到的是缓存中的数据,但是实际上数据库此时已经改变了,那么拿到的缓存中拿到数据与数据库中数据会有不一致的问题。解决数据一致性问题会要进行代码操作,增加代码维护成本,如果使用redis还会有运维成本。

门牙咬脆骨的奋斗日志 1469

数据库1:数据库创建与管理(头歌云课)

在 Windows 系统中,可以直接通过 SQLServer 的应用程序连接数据库,不过很多时候在生产环境下,我们需要通过命令行来连接数据库。两个数据库,数据库名分别为 TestDb 和 MyDb 的数据库,注意先后顺序。为了完成本关任务,你需要掌握:1.如何在 Linux 系统中连接 SQLServer 数据库,2.如何创建数据库。连接的数据库是本地数据库,用户名是 sa ,密码是 '

weixin_60530224的博客 2315

Java中解决Redis缓存雪崩,缓存击穿,缓存穿透的问题

缓存穿透,缓存雪崩,缓存击穿

qq_54377229的博客 1533

利用ArcMap实现遥感图像语义分割标注的完整流程解析

本文详细解析了利用ArcMap进行遥感图像语义分割标注的完整工作流。从工程创建、数据导入、SHP文件创建,到实战勾画地物、要素转栅格,再到最终的裁剪对齐,提供了每一步的关键操作与避坑指南。该方法特别适合处理大尺寸、带地理坐标的遥感影像,能高效产出精准对齐的图像-标签对,为后续深度学习模型训练奠定可靠的数据基础。

gpu4optimizer的博客 1218

群晖Hyper Backup还原实战:加密与非加密备份的完整操作指南

本文详细介绍了群晖Hyper Backup在加密与非加密备份场景下的完整还原操作指南。通过实战案例和高级技巧,帮助用户应对硬盘故障或系统崩溃时的数据恢复挑战,特别是加密备份恢复中的关键节点和常见陷阱。

weixin_29323365的博客 445

什么是Redis缓存穿透?redis面试题及答案乐分享(附面试题大全)

场景二:高并发的情况下,如果A删除完缓存,A在去更新数据库,在更新的过程后,B来查询数据,发现缓存没有,就从数据库获取并缓存,后面A更新成功,就会出现缓存和数据库不一致。高并发解决注意点: 1.读请求时间堵塞 读请求进行非常轻度的异步化,每个读请求必须在超时间内返回,该方案最大的风险在于可能数据更新很频繁,导致队列中挤压了大量的更新操作在里面,然后读请求会发生大量的超时,导致大量的请求直接走数据库,像遇到这种情况,一般要做好足够的压力测试,如果压力过大,需要根据实际情况添加机器。

程序员高级码农的博客 1063

用LTspice仿真Buck电路输出电容:从参数计算到波形优化的全流程演示

本文详细介绍了使用LTspice仿真Buck电路输出电容的全流程,从理论计算到波形优化。通过解析关键参数如纹波电压、瞬态响应和ESR,结合工程计算方法和LTspice仿真技巧,帮助工程师优化Buck电路设计,解决输出纹波过大和瞬态响应不佳的问题。

night的博客 852

jenkins如何清缓存_什么是Redis缓存穿透?redis面试题及答案乐分享(附面试题大全)...

一、缓存雪崩为什么使用缓存?1.提高性能:缓存查询速度比数据库查询速度快(内存vs硬盘)。2.提高并发能力:缓存分担了部分请求,支持更高的并发。redis存储的数据和内存占用是有限的,因此我们才需要对数据设置过期时间,并采用惰性删除+定期删除策略清除过期键,释放内存。如果数据缓存的过期时间是相同的,redis正好把这部分数据清掉或者redis服务器出现故障,缓存失效请求全部走数据库,这种现象就是缓...

weixin_31948907的博客 224

中国裁判文书网案例批量爬取

本文介绍了某法院网站数据采集的技术研究过程,主要包含JS逆向分析和数据解密方法。通过开发者工具分析发现页面数据经过加密处理,重点研究了ciphertext等加密参数的生成逻辑。文章详细记录了定位加密函数、扣取加密代码、解密数据处理的全流程,并验证了解密方法的有效性。研究过程中强调了技术使用的法律边界,明确声明仅用于合法技术研究,禁止任何非法数据爬取行为。最终实现了加密数据的成功解密,并解释了各请求参数的作用,为后续数据清洗和存储奠定了基础。

2303_80825459的博客 817

如何计算 R 中的基尼系数(附示例)

以意大利统计学家Corrado Gini命名,基尼系数是衡量人口收入分配的一种方法。基尼系数的值在 0 到 1 之间,值越高代表收入不平等越大,其中:0代表完全的收入平等(每个人的收入都一样) 1代表完全的收入不平等(一个人拥有所有收入) 您可以在此处找到按国家/地区列出的基尼系数列表。以下示例显示了使用DescTools包中的Gini()函数计算 R 中的基尼系数的两种方法。示例 1:使用个人收入计算基尼系数假设我们有以下 10 个人的年收入列表:收入:5 万美元、5 万美元、7 万美元、7 万美元、7

Mrrunsen的博客 2991

删除gradle 的缓存_什么是Redis缓存穿透?redis面试题及答案乐分享(附面试题大全)...

一、缓存雪崩为什么使用缓存?1.提高性能:缓存查询速度比数据库查询速度快(内存vs硬盘)。2.提高并发能力:缓存分担了部分请求,支持更高的并发。redis存储的数据和内存占用是有限的,因此我们才需要对数据设置过期时间,并采用惰性删除+定期删除策略清除过期键,释放内存。如果数据缓存的过期时间是相同的,redis正好把这部分数据清掉或者redis服务器出现故障,缓存失效请求全部走数据库,这种现象就是缓...

weixin_39552204的博客 67

黑猫带你学UFS协议第2篇:UFS相关名词释义

本文依据UFSJEDEC3.1、个人工作经验整理而成,如有错误请留言。文章为个人辛苦整理,付费内容,已加入原创保护,禁止私自转载。文章所在专栏《黑猫带你学UFS协议详解》

黑猫奥利奥的博客 5314

redis面试题总结(附答案)

Redis中间件实战系列,打造精品专栏。

学Java,找哪吒 11万+

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4237

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

什么是Redis缓存穿透?redis面试题及答案乐分享!

场景二:高并发的情况下,如果A删除完缓存,A在去更新数据库,在更新的过程后,B来查询数据,发现缓存没有,就从数据库获取并缓存,后面A更新成功,就会出现缓存和数据库不一致。高并发解决注意点: 1.读请求时间堵塞 读请求进行非常轻度的异步化,每个读请求必须在超时间内返回,该方案最大的风险在于可能数据更新很频繁,导致队列中挤压了大量的更新操作在里面,然后读请求会发生大量的超时,导致大量的请求直接走数据库,像遇到这种情况,一般要做好足够的压力测试,如果压力过大,需要根据实际情况添加机器。

IT_1024的博客 705

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

精选100道Redis面试题,附答案

我把所有Java相关的面试题和答案都整理成了PDF,并且带书签目录,阅读起来非常方便 面试题及答案PDF下载:https://www.hicxy.com/?p=2645 面试题及答案PDF下载:https://www.hicxy.com/?p=2645 面试题及答案PDF下载:https://www.hicxy.com/?p=2645 1. 缓存穿透、缓存击穿、缓存雪崩解决方案? 缓存穿透: 指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB .

胖虎 8917

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis面试题大全(2024最新版,附全面解析和答案)

Redis(Remote Dictionary Server)是一种开源的、高性能的内存键值数据库,广泛应用于缓存、会话存储、实时数据处理等场景。由于其高效率和灵活性,Redis在互联网公司中有着广泛的应用。本文将涵盖Redis的基础知识、高级功能及其常见面试题,让大家全面掌握Redis,以应对面试中的各种问题。

科技改变人类,技术成就未来 2540

黑马面试Redis篇学习笔记整理, 附Redis高频面试题及答案.

黑马面试课程Redis篇学习笔记整理

m0_68998179的博客 2454

46道史上最全Redis面试题,面试官能问的都被我找到了(含答案)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34081595的博客 1万+

史上最全141道大数据面试题:Redis+Linux+kafka+Hadoop,附答案

Redis面试专题及答案 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免? 使用过 Redis 做异步队列么,你是怎么用的?有什么缺点? 使用过 Redis 分布式锁么,它是怎么实现的? 上述 Redis 分布式锁的缺点 Redis 回收进程如何工作的? Redis 如何做内存优化? Redis key 的过期时间和永久有效分别怎么设置? Redis 事务相关的命令有哪几个? 怎么理解 Redis 事务? Redis 中的管道有什么用? Redis 集群如何选择数据库? Redi

程序员高级码农 3032
上一篇: 一篇搞定CAS,深度讲解,面试实践必备
下一篇: 大佬自爆:奉劝程序员从中小型企业跳槽阿里P8狂刷以下面试题
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值