@@ -2291,6 +2291,12 @@ drop直接删掉表,truncate删除表中数据,再插入时自增长id又从
2291
2291
2292
2292
### 201.索引的工作原理及其种类
2293
2293
2294
+ 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中数据。索引的实现通常使用B树以其变种B+树。
2295
+
2296
+ 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
2297
+
2298
+ 为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)
2299
+
2294
2300
### 202.连接的种类
2295
2301
### 203.数据库优化的思路
2296
2302
### 204.存储过程与触发器的区别
@@ -2299,10 +2305,67 @@ drop直接删掉表,truncate删除表中数据,再插入时自增长id又从
2299
2305
2300
2306
## Redis
2301
2307
### 207.Redis宕机怎么解决?
2308
+
2309
+ 宕机:服务器停止服务‘
2310
+
2311
+ 如果只有一台redis,肯定 会造成数据丢失,无法挽救
2312
+
2313
+ 多台redis或者是redis集群,宕机则需要分为在主从模式下区分来看:
2314
+
2315
+ slave从redis宕机,配置主从复制的时候才配置从的redis,从的会从主的redis中读取主的redis的操作日志1,在redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据;
2316
+
2317
+ 2, 如果从数据库实现了持久化,此时千万不要立马重启服务,否则可能会造成数据丢失,正确的操作如下:在slave数据上执行SLAVEOF ON ONE,来断开主从关系并把slave升级为主库,此时重新启动主数据库,执行SLAVEOF,把它设置为从库,连接到主的redis上面做主从复制,自动备份数据。
2318
+
2319
+ 以上过程很容易配置错误,可以使用redis提供的哨兵机制来简化上面的操作。简单的方法: redis 的哨兵(sentinel)的功能
2320
+
2302
2321
### 208.redis和mecached的区别,以及使用场景
2322
+
2323
+ 区别
2324
+
2325
+ 1、redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可以用于缓存其他东西,例如图片,视频等等
2326
+
2327
+ 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储
2328
+
2329
+ 3、虚拟内存-redis当物流内存用完时,可以将一些很久没用的value交换到磁盘
2330
+
2331
+ 4、过期策略-memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire设定,例如expire name 10
2332
+
2333
+ 5、分布式-设定memcache集群,利用magent做一主多从,redis可以做一主多从。都可以一主一丛
2334
+
2335
+ 6、存储数据安全-memcache挂掉后,数据没了,redis可以定期保存到磁盘(持久化)
2336
+
2337
+ 7、灾难恢复-memcache挂掉后,数据不可恢复,redis数据丢失后可以通过aof恢复
2338
+
2339
+ 8、Redis支持数据的备份,即master-slave模式的数据备份
2340
+
2341
+ 9、应用场景不一样,redis除了作为NoSQL数据库使用外,还能用做消息队列,数据堆栈和数据缓存等;Memcache适合于缓存SQL语句,数据集,用户临时性数据,延迟查询数据和session等
2342
+
2343
+ 使用场景
2344
+
2345
+ 1,如果有持久方面的需求或对数据类型和处理有要求的应该选择redis
2346
+
2347
+ 2,如果简单的key/value存储应该选择memcached.
2348
+
2303
2349
### 209.Redis集群方案该怎么做?都有哪些方案?
2350
+
2351
+ 1,codis
2352
+
2353
+ 目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点数据客恢复到新hash节点
2354
+
2355
+ 2redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。具体看官方介绍
2356
+
2357
+ 3.在业务代码层实现,起几个毫无关联的redis实例,在代码层,对key进行hash计算,然后去对应的redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的字典脚本恢复,实例的监控,等等
2358
+
2304
2359
### 210.Redis回收进程是如何工作的
2305
2360
2361
+ 一个客户端运行了新的命令,添加了新的数据。
2362
+
2363
+ redis检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收。
2364
+
2365
+ 一个新的命令被执行等等,所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断回收回到边界以下。
2366
+
2367
+ 如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。
2368
+
2306
2369
## MongoDB
2307
2370
### 211.MongoDB中对多条记录做更新操作命令是什么?
2308
2371
### 212.MongoDB如何才会拓展到多个shard里?
0 commit comments