您的位置:首页 > 数据库 > Redis

关于Redis知识点-----Java面试点

2019-04-07 11:26 686 查看

一、介绍Redis

1.1 Redsi本质是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。 1.2 Redis支持丰富的数据类型。支持String、list、set、sorted set、hash等事物,其操作都是原子性的。 1.3 丰富的特性。可用缓存,消息,缓存基础数据,缓存物流节点信息,缓存WebSocket的离线消息、分布式锁、可以用list数据类型做队列,按key设置过期时间,过期后将自动删除。 1.4 Redis主要缺点是数据库容量收到物理内存的限制,不能用作海量数据的高性能读写。它主要局限用在较小数据量的高性能操作和运算上。

二、Redis持久化

Redis是一个缓存服务器,为了保证它的高性能,它会将数据缓存到内存当中,它的持久化就是将内存当中的数据写到磁盘当中,Redis提供了两种持久化方式RDB和AOF。

1.RDB 持久化: 该机制可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。有两个进行,父进程继续处理用户的请求,子进程在指定的时间间隔内将内存中的数据集进行快照,并负责将快照的内存中的内容写到临时文件。
即:定期把内存当中的当前时刻的数据保存到磁盘。当然,用户也可以使用save或者bgsave命令通知redis做一次快照持久化。

2.AOF 持久化: 以日志的形式来记录每个写操作,将redis执行过的所有写命令记录下来(读操作不记录),通过write函数追加到文件中(默认是appendonly.aof),并且只许追加文件但可以改写文件。即:把对Redis数据库操作 (增删改)操作的命令,保存到文件当中。redis重启的话就根据日志文件的内容,将写指令从前到后执行一次以完成数据的恢复工作。默认更新时间是 1 秒 。

比较:RDB在恢复大数据集时的速度比 AOF 的恢复速度要快 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那么RDB方式要比AOF方式更加高效。因为它只需要启动一个子线程去定时做持久化就可以,而RDB需要对用户的请求记性反馈,同时还要将操作记录到日志中。但是RDB的缺点是最后一次持久化后的数据可能会丢失。所以,如果对数据完整新有要求的话,可以使用AOF持久化方式,但是它也有缺点,因为它的日志文件记录了所有的操作,它会越来越大,这样AOF的速度可能会慢于 RDB,不过在处理巨大的写入载入时, RDB 可以提供更有保证的最大延迟时间(latency)。

三、Redis最适合的场景有哪些?

(1)、会话缓存(Session Cache)
(2)、全页缓存(FPC)
(3)、队列
(4)、排行榜/计数器
(5)、发布/订阅

四、Redis 常见的性能问题都有哪些?如何解决?

(1) Master 最好不要做任何持久化工作,如RDB内存快照和AOF日志文件。
(2)如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略为每秒同步一次。
(3) Master 调用 BGREWRITEAOF 重写 AOF 文件, AOF 在重写的时候会占大量的 CPU 和内存资源,导致服务 load 过高,出现短暂服务暂停现象。
(4) Redis 主从复制的性能问题。为了主从复制的速度和连接的稳定性, Slave 和 Master 最好在同一个局域网内。
(5) 尽量避免在压力很大的主库上增加从库。
(6)主从复制不要用图状结构,用单向链表结构更为 稳定。
即:Master < Slave1 < Slave2< Slave3 …
这样的结构方便,解决单点故障问题,实现Slave对Master的替换,如果Master挂了,可以立即启用Slaver1做Master其他不变。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: