1.什么是Redis

Redis: 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。

2.Redis 可以怎么用

(1)存储键和五种不同类型的值之间的映射

(2)键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合

(3)与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,是已知性能最快的Key-Value DB。

(3)redis有怎么其他用途

Redis 也经常用来做分布式锁,支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

3.redis有哪些优点

(1)读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。

(2)支持数据持久化,支持AOF和RDB两种持久化方式。

(3)支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。

(4)数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。

(5)支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

 4.redis有哪些缺点

(1)数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

(2)Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

(3)主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。

(4)Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

5.为怎么要用redis

高性能:从缓存中存取速度远快与数据库的存取速度。

高并发:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

6.Redis为什么这么快

(1)采用单线程

(2)完全基于内存

(3)数据结构简单

(4)采用多路I/O复用,非阻塞式I/O

(5)有自己的VM机制,比一般的系统调用系统函数的速度要快。因为系统会浪费一定的时间去移动和请求

7.Redis的应用场景

(1)计数器

(2)缓存

(3)会话缓存

(4)全页缓存(FPC)

(5)查找表

(6)消息队列(发布/订阅功能)

(7)分布式锁实现

(8)其它

8.redis相比其他缓存有怎么优势

    Redis相比其他缓存,有一个非常大的优势,就是支持多种数据类型。

9.什么是Redis持久化

    持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

10.Redis 的持久化机制是什么?各自的优缺点

    Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制

    RDB:是Redis DataBase缩写快照

    RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对      应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。

   img

 

优点:

        1、只有一个文件 dump.rdb,方便持久化。
        2、容灾性好,一个文件可以保存到安全的磁盘。
        3、性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO 最大化。      使 用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能
        4.相对于数据集大时,比 AOF 的启动效率更高。
缺点:

        1、数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)
        2、AOF(Append-only file)持久化方式: 是指所有的命令行记录以 redis 命令请 求协议的格式完全持久化存储)保存为 aof 文件。


AOF:持久化

        AOF持久化(即Append Only File持久化),则是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。

当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。

img

 

优点:

        1、数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次 命令操作就记录到 aof 文件中一次。
        2、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题。
        3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))
缺点:

        1、AOF 文件比 RDB 文件大,且恢复速度慢。
        2、数据集大的时候,比 rdb 启动效率低。
11.AOF对比RDB优缺点是什么

        AOF文件比RDB更新频率高,优先使用AOF还原数据。
        AOF比RDB更安全也更大
        RDB性能比AOF好
        如果两个都配了优先加载AOF

12.如何选择合适的持久化方式

一般来说, 如果想达到足以媲美PostgreSQL的数据安全性,你应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失,那么你可以只使用RDB持久化。

有很多用户都只使用AOF持久化,但并不推荐这种方式,因为定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比AOF恢复的速度要快,除此之外,使用RDB还可以避免AOF程序的bug。

如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。

13.Redis持久化数据和缓存怎么做扩容?

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

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

14.过期键的删除策略

Redis的过期键的删除策略

我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。

过期策略通常有以下三种:

(1)定时过期

(2)惰性过期

(3)定期过期

Redis中同时使用了惰性过期和定期过期两种过期策略。

15.Redis key的过期时间和永久有效分别怎么设置?

  expire 和 persist命令。

16.内存相关

  MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

  redis内存数据集大小(一般为20w)上升到一定大小的时候,就会施行数据淘汰策略。

17.Redis的内存淘汰策略有哪些

(1)全局的键空间选择性移除

(2)设置过期时间的键空间选择性移除

17.总结

   Redis的内存淘汰策略的选取并不会影响过期的key的处理。内存淘汰策略用于处理内存不足时的需要申请额外空间的数据;过期策略用于处理过期的缓存数据。

18.Redis主要消耗什么物理资源?

 内存

19.Redis的内存用完了会发生什么?

  如果达到设置的上限,Redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以配置内存淘汰机制,当Redis达到内存上限时会冲刷掉旧的内容。

20.Redis如何做内存优化

  可以好好利用Hash,list,sorted set,set等集合类型数据,因为通常情况下很多小的Key-Value可以用更紧凑的方式存放到一起。尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面

21.Redis线程模型

  Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器(file event handler)。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐