mfc 子窗体任何消息都不触发_java 面试专题三:mysql面试题下篇(都是精华,实战总结)...

nosql :redis

1.结合项目经验,说下 redis 应用场景

缓存:合理使用缓存加快数据访问速度,降低后端数据源压力

排行榜:按照热度排名,按照发布时间排行,主要用到列表和有序集合

计数器应用:视频网站播放数,网站浏览数,使用redis计数

社交网络:赞、踩、粉丝、下拉刷新

消息队列:发布和订阅

2.redis 支持数据类型?各有什么特点?

String(字符串) string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

Hash(哈希) Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map

List(列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边),它的底层实际是个链表

Set(集合) Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,

zset(sorted set:有序集合) Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

3.有什么持久化策略?

各有什么特点 策略:支持RDB和AOF两种持久化机制,可以避免因进程退出造成数据丢失,特点如下:

RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。 优点在于使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能;缺点在于RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候;有手动触发和自动触发,手动触发有save和bgsave两命令 ;

 save命令:阻塞当前Redis,直到RDB持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它

bgsave命令:redis进程执行fork操作创建子线程,由子线程完成持久化,阻塞时间很短(微秒级),是save的优化,在执行redis-cli shutdown关闭redis服务时,如果没有开启AOF持久化,自动执行bgsave; 显然bgsave是对save的优化

策略:支持RDB和AOF两种持久化机制,可以避免因进程退出造成数据丢失,特点如下:

AOF:针对RDB不适合实时持久化,redis提供了AOF持久化方式来解决,将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部,在append操作返回后(已经写入到文件或者即将写入),才进行实际的数据变更,“日志文件”保存了历史所有的操作过程;当server需要数据恢复时,可以直接replay此日志文件,即可还原所有的操作过程 开启:redis.conf设置:appendonly yes (默认不开启,为no) 默认文件名:appendfilename "appendonly.aof"

5.介绍下哨兵机制

redis sentinel是一个分布式架构,其中包含了若干个sentinal节点和Redis节点,每个sentinel节点会对数据节点和sentinel节点进行监控,当它发现节点不可达是,会对节点做下线标识。如果大部分sentinal节点认为主节点不可达,sentinal节点之间会进行“协商” ,选举出来一个sentinal节点完成故障转义,并同时把这个故障通知到应用方;

eb0f4b3d6d97217f745639e1cff5dd6b.png

6.介绍 redis 集群方案?

以及其原理 RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当遇到单机内存、并发等瓶颈时,可使用此方案来解决这些问题,一个 redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个。集群使用公式(CRC16[key]&16383)函数来计算键 key 属于哪个槽。集群中的每一个节点负责处理一部分哈希槽。

ea3591b23a26c8c90fd26fcab8946aa0.png
3b6aeb6d97e576dbffb6fb8bc45888c6.png

7.redis能做读写分离吗?

同步策略是怎么实现的? redis提供了主从复制和哨兵机制来提高redis服务的健壮性和高可用,但是从严格意义上来讲,redis并没有实现读写分离,主从复制架构中,主节点用于响应读写请求,从节点用于数据备份,如果需要实现读从从节点读,应用需要对客户端进行改造;但在真实场景下一般不需要做此方案,读写分离主要应用在磁盘IO比较大的场景,而redis是缓存级别的 同步策略: redis 2.8版本以上使用psync命令完成同步,过程分“全量”与“部分”复制 a) 全量复制:一般用于初次复制场景(第一次建立SLAVE后全量) b) 部分复制:网络出现问题,从节占再次连主时,主节点补发缺少的数据,每次数据增加同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值