Redis的那些最多见面试问题--附连接

Redis 持久化的方式

rdb(快照,Snapshots)

缺省状况状况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你能够配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你能够手工调用命令SAVE或BGSAVE。html

AOF

快照模式并不十分健壮,当系统中止,或者无心中Redis被kill掉,最后写入Redis的数据就会丢失。这对某些应用也许不是大问题,但对于要求高可靠性的应用来讲,面试

15.redis的缓存失效策略和主键失效机制

做为缓存系统都要按期清理无效数据,就须要一个主键失效和淘汰策略.redis

在Redis当中,有生存期的key被称为volatile。在建立缓存时,要为给定的key设置生存期,当key过时的时候(生存期为0),它可能会被删除。缓存

一、影响生存时间的一些操做

生存时间能够经过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆盖原来的数据,也就是说,修改key对应的value和使用另外相同的key和value来覆盖之后,当前数据的生存时间不一样。dom

好比说,对一个 key 执行INCR命令,对一个列表进行LPUSH命令,或者对一个哈希表执行HSET命令,这类操做都不会修改 key 自己的生存时间。另外一方面,若是使用RENAME对一个 key 进行更名,那么更名后的 key的生存时间和更名前同样。code

RENAME命令的另外一种多是,尝试将一个带生存时间的 key 更名成另外一个带生存时间的 another_key ,这时旧的 another_key (以及它的生存时间)会被删除,而后旧的 key 会更名为 another_key ,所以,新的 another_key 的生存时间也和本来的 key 同样。使用PERSIST命令能够在不删除 key 的状况下,移除 key 的生存时间,让 key 从新成为一个persistent key 。server

二、如何更新生存时间

能够对一个已经带有生存时间的 key 执行EXPIRE命令,新指定的生存时间会取代旧的生存时间。过时时间的精度已经被控制在1ms以内,主键失效的时间复杂度是O(1)。htm

EXPIRE和TTL命令搭配使用,TTL能够查看key的当前生存时间。设置成功返回 1;当 key 不存在或者不能为 key 设置生存时间时,返回 0 。blog

最大缓存配置

在 redis 中,容许用户设置最大使用内存大小内存

server.maxmemory

默认为0,没有指定最大缓存,若是有新的数据添加,超过最大内存,则会使redis崩溃,因此必定要设置。redis 内存数据集大小上升到必定大小的时候,就会实行数据淘汰策略。

redis 提供 6种数据淘汰策略:

  • volatile-lru:从已设置过时时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过时时间的数据集(server.db[i].expires)中挑选将要过时的数据淘汰
  • volatile-random:从已设置过时时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数据。

连接

Redis的那些最多见面试问题

相关文章
相关标签/搜索