?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参数来定义快照的周期。
? ?
?
优点:
????????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恢复。
?
优点:
????????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才叫单线程模型。
|