NoSQL(基于内存的数据库),并且提供一定的持久化功能。Redis和MongoDB是当前使用最广泛的NoSQL。Redis的性能十分优越,可以支持每秒十几万次的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。
1.Redis 在 Java Web 主要有两个应用场景:
1)存储缓存用的数据;
2)需要高速读/写的场合使用它快速读/写;
2.Redis持久化?持久化方式?优缺点?
Redis持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis 提供了两种持久化方式:
1)RDB(默认,Redis DataBase缩写) :定时的持久机制,宕机有可能会存在数据丢失。
功能核心函数:rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)
2)AOF(Append-only file缩写):基于操作日志的持久机制。
每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作。AOF写入保存:1) WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件;2)SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
存储结构:Redis通讯协议(RESP)格式的命令文本存储。(RESP 是redis客户端和服务端之间使用的一种通讯协议;其特点:实现简单、快速解析、可读性好)
比较: 1)AOF文件比RDB更新频率高,优先使用AOF还原数据;
2)AOF比RDB更安全也更大;
3)RDB性能比AOF好;
4)若两个都配置了优先加载AOF。
3.什么是RESP(redis通讯协议)?有什么特点?
RESP是Redis客户端与服务端之间使用的一种通讯协议。
特点:实现简单、快速解析、可读性好。
4.Redis 有哪些架构模式?讲讲各自的特点?
单机版
特点:简单
问题:1)内存容量有限;2)处理能力有限;3)无法高可用。
主从复制
Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步给从服务器,从而一直保证主从服务器的数据相同。
特点:1)master/slave角色;2)master/slave数据相同;3)降低master读压力在转交从库
问题:1)无法保证高可用;2)没有解决master写的压力
哨兵
Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
特点:1)保证高可用;2)监控各个节点;3)自动故障迁移
缺点:1)主从模式,切换需要时间丢数据;2)没有解决 master 写的压力
集群(proxy型)
集群(直连型)
5.Redis支持的数据结构?
String(字符串)、List(列表)、Set(集合)、zset(sorted set:有序集合)
6.缓存穿透?
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
如何避免?
1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。(将空值缓存起来。)
2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。
7.缓存雪崩?
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力,导致系统崩溃。
如何避免?
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期
3:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
参考:https://blog.csdn.net/ahilll/article/details/82421994
https://www.cnblogs.com/shsxt/p/10763608.html
https://blog.csdn.net/tlk20071/article/details/80384817
https://www.jianshu.com/p/56999f2b8e3b
1.持久化方式
RDB:在指定的时间间隔能对你的数据进行快照存储。
AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
RDB原理
AOF原理
https://segmentfault.com/a/1190000015983518
2.主从复制
https://www.cnblogs.com/shsxt/p/7911591.html
Redis支持简单且易用的主从复制,可以让从服务器成为主服务器的精准复制品。
Redis 使用异步复制。 从 Redis 2.8 开始, 从服务器会以每秒一次的频率向主服务器报告复制流的处理进度。
一个主服务器可以有多个从服务器。
不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构。
复制功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。
复制功能也不会阻塞从服务器: 只要在 redis.conf 文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询。
复制功能可以单纯地用于数据冗余(data redundancy), 也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的 SORT 命令可以交给附属节点去运行。
可以通过复制功能来让主服务器免于执行持久化操作: 只要关闭主服务器的持久化功能, 然后由从服务器去执行持久化操作即可。








网友评论