[晓华亲子英语:让孩子轻松说出地道英语61个音频课]百度云网盘资源
[晓华亲子英语:让孩子轻松说出地道英语61个音频课]百度云网盘资源**** Hidden Message *****
谢谢分享!!!!! 让孩子轻松说出地道英语61个音频课 谢谢分享 学习下 看看这个感谢楼主分享谢谢了 好东西谢谢分享 谢谢分享!!!!!!! 66666666666666666666 [晓华亲子英语:让孩子轻松说出地道英语61个音频课]百 1. mongoDB、redis和memcached的应用场景,各自优势?
• mongoDB(端口27017):是文档型的非关系型数据库,使用bson结构
○ 优点:
§ 文档结构的存储方式,能够更便捷的获取数据
§ 内置GridFS,支持大容量的存储
§ 内置Sharding,分片简单
§ 海量数据下,性能优越
§ 支持自动故障恢复(复制集)
○ 缺点:
§ 不支持事务操作
§ 占用空间过大
§ MongoDB没有如MySQL那样成熟的维护工具
§ 无法进行关联表查询,不适用于关系多的数据
§ 复杂聚合操作通过mapreduce创建,速度慢
§ 模式自由,自由灵活的文件存储格式带来的数据错误
○ 应用场景:
§ 游戏场景:使用MongoDB存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询、更新
§ 物流场景:存储订单信息,订单状态在运送过程当中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来
§ 物联网场景:存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度分析
§ 视频直播:存储用户信息,礼物信息
• redis(端口6379):是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是读写性能高。
○ 优点:
§ 支持多种数据类型 string、list、set、zset、hash
§ 数据可以持久化保持(AOF、快照),写入硬盘
§ 支持主从复制。主机会自动将数据同步到从机,可以进行读写分离
§ 读写性能优异
○ 缺点:
§ 主机宕机,主从数据复制过程中,数据未完全复制到从机。会出现数据不一致
§ Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
○ 应用场景:
§ 配合关系型数据库做告诉缓存
§ 缓存高频次数据,降低数据库IO
§ 分布式架构,做session共享
• memcached(端口11211):是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap
○ 缺点:
§ 不能持久化存储
§ 存储数据有限制:1M 【大于1M,认为就行分割】(内存碎片)
§ 存储数据只能key-value
§ 集群数据没有复制和同步机制
○ 应用场景:
§ 服务器间数据共享
2. Redis与memcached的区别?
1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;
3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;
4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;
5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;
6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);
7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;
8、Redis支持数据的备份,即master-slave模式的数据备份;
3. memcached、mongoDB、redis的区别?
1.性能上:
性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。
前两者性能差不多,大于 Mongodb。
2.内存空间和数据量大小:
MemCached可以修改最大内存,采用LRU算法。Redis增加了VM的特性,突破了物理内存的限制。(2.4后取消
MongoDB 适合大数据量的存储,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务不要和别的服务在一起。
3.操作便利上:
MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。
Mongodb 支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
4.可靠性上:
MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
MongoDB 从 1.8 版本开始采用 binlog 方式支持持久化的可靠性。
5.应用场景:
Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
MongoDB:主要解决海量数据的访问效率问题。
4. MongoDB有事务吗?
mongoDB 4.0之后支持了事物
5. redis有哪些数据结构?
Redis 有 5 种基础数据结构,它们分别是:string(字符串)、list(列表)、hash(字典)、set(集合) 和 zset(有序集合)
6. redis不同数据类型的应用场景?
• String:最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存(INCR 命令进行 原子性 的自增操作)。
• Hash:这里value存放的是结构化的对象,比较方便的是操作其中的某个字段。
• List:使用list的数据结构可以做简单的消息队列的功能。另外还有一个就是,可以利用lrang命令,做基于redis的分页功能,性能极佳,用户体验好。List还可以很好的完成排队,先进先出的原则。
• Set:set存放的是一堆不重复的集合,所以可以做全局去重的功能,还可以利用交集,并集,差集等操作,可以计算共同爱好,全部的爱好,自己独有的喜好等。
• Sorted set:多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用。
7. redis的不同数据结构最多能存储多少个元素
• Strings类型:一个String类型的value最大可以存储512M
• Lists类型:list的元素个数最多为2^32-1个,也就是4294967295个。
• Sets类型:元素个数最多为2^32-1个,也就是4294967295个。
• Hashes类型:键值对个数最多为2^32-1个,也就是4294967295个。
• Sorted sets类型:跟Sets类型相似。
8. Redis的list、zset的底层实现
• List:基于压缩列表实现
• zset:基于字典+跳跃表skiplist实现
9. Redis是单进程单线程的?
对
10. Redis是基于内存的么?
是
11. Redis高并发快的原因?
• redis是基于内存的,内存的读写速度非常快;
• redis是单线程的,省去了很多上下文切换线程的时间;
• redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。
12. Redis有哪些持久化方案?不同方案的区别?
• RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
○ 优点:
§ 体积更小:相同的数据量rdb数据比aof的小,因为rdb是紧凑型文件
§ 恢复更快:因为rdb是数据的快照,基本上就是数据的复制,不用重新读取再写入内存
§ 性能更高:父进程在保存rdb时候只需要fork一个子进程,无需父进程的进行其他io操作,也保证了服务器的性能。
○ 缺点:
§ 故障丢失:因为rdb是全量的,我们一般是30分钟或者1小时或者每天对redis进行rdb备份,(注,也可以是用自带的策略),但是最少也要5分钟进行一次的备份,所以当服务死掉后,最少也要丢失5分钟的数据。
§ 耐久性差:相对aof的异步策略来说,因为rdb的复制是全量的,即使是fork的子进程来进行备份,当数据量很大的时候对磁盘的消耗也是不可忽视的,尤其在访问量很高的时候,fork的时间也会延长,导致cpu吃紧,耐久性相对较差。
• AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
○ 优点:
§ 数据保证:我们可以设置fsync策略,一般默认是everysec,也可以设置每次写入追加,所以即使服务死掉了,咱们也最多丢失一秒数据
§ 自动缩小:当aof文件大小到达一定程度的时候,后台会自动的去执行aof重写,此过程不会影响主进程,重写完成后,新的写入将会写到新的aof中,旧的就会被删除掉。
○ 缺点:
§ 性能相对较差:它的操作模式决定了它会对redis的性能有所损耗
§ 体积相对更大:尽管是将aof文件重写了,但是毕竟是操作过程和操作结果仍然有很大的差别,体积也毋庸置疑的更大。
§ 恢复速度更慢
13. AOF如何缩减自身文件大小
AOF会进行重写AOF文件
14. AOF缩减自身文件大小的时候,数据库来了新的操作怎么办?
AOF写入时会有AOF缓冲区,AOF重写有AOF重写缓冲区.此时会把操作追加到两个缓冲区中,保证用户修改的不丢失
15. redis数据淘汰机制?
在正常运行的时候,redis也会清除一下过期key,redis有两种过期策略,定期删除和惰性删除
• 定期删除:redis每个100ms随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除
• 惰性删除:在获取某个key的时候,redis检查一下,如果该key设置了过期时间则判断该过期时间是否已经过期,如果过期了就直接删掉并不返回任何东西
当redis内存快耗尽时,redis会启动内存淘汰机制,将部分key清掉以腾出内存。
redis提供6中数据淘汰策略,可在redis.conf中配置
• noeviction:禁止驱逐数据。默认配置都是这个。当内存使用达到阀值的时候,所有引起申请内存的命令都会报错。
• volatile-lru:从设置了过期时间的数据集中挑选最近最少使用的数据淘汰。
• volatile-ttl:从已设置了过期时间的数据集中挑选即将要过期的数据淘汰。
• volatile-random:从已设置了过期时间的数据集中任意选择数据淘汰。
• allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。
allkeys-random:从数据集中任意选择数据淘汰。