● 说一下使用索引的一些技巧?
(1) 对于创建的多列索引(复合索引),不是使用的第一部分就不会使用索引。
(2) 对于使用like的查询,查询如果是’%xx’不会使用到索引。而’xx%’会使用到索引。
(3) 如果条件中有or,必须所有字段都必须单独使用时能使用索引,从可以走索引。
(4) 如果列类型是字符串,那一定要在条件中间数据使用引号引用起来,否则不会走索引。
(5) 如果mysql估计使用全表扫描要比索引快,则不使用索引(如表中只有一条数据)。
● 介绍下主从同步和读写分离?
一台数据库支持的最大并发连接数是有限的,如果用户并发访问太多,一台服务器满足不了要求就可以集群处理,MySQL的集群处理技术最常用的就是读写分离。
主从同步:数据库最终会把数据持久化到磁盘,如果集群必须确保每个数据库服务器的数据是一致的。能改变数据库数据的操作都往主数据库去写,而其他的数据库从主数据库上同步数据。
读写分离:使用负载均衡来实现写的操作都往主数据去,而读的操作都往从的服务器去。
● 有没有使用过redis?
Redis是一个key-value的数据库。先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失数据,支持的数据类型比较多。主要用了做缓存数据库和web集群中用来做中央缓存存放session。
● redis有哪些使用场景?
缓存:把经常需要查询且很少修改的数据,放到读速度较快的空间(内存),以便下次访问 减少时间,减轻压力,减少访问时间。
计数器:redis中的计算器时原子性的内存操作,可以解决库存溢出问题,进销存系统库存溢出。
session缓存服务器:web集群式作为session缓存服务器。
● redis存储对象的方式?
Json字符串:需要把对象转化为json字符串,当作字符串处理,直接使用set、get来设置或者获取。优点是设置和获取比较简单。缺点没有提供专门的方法,需要把对象转换为json,可能存在性能问题。
字节:需要做做序列化,就是把对象序列化为字节保存。如果是存储百万级的大数据对象,建议采用存储序列化对象的方式。
如果是少量的数据级对象,建议使用json转换成String方式。
● 说说redis数据淘汰机制?
在redis中,允许用户设置最大使用内存大小server.maxmemory。在内存限定的情况是很有用的。譬如,在一台8g机子上部署4个redis服务点,每个服务点分配1.5G的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。
Redis内存数据集大小上升到一定的时候,就会施行数据淘汰机制,redis提供6中数据淘汰机制。
(1) volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
(2) volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选要过期的数据淘汰。
(3) volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。
(4) allkeys-lru:从数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
(5) allkeys-random:从数据集(server.db[i].expires)中任意选择数据淘汰。
(6) no-enviction:禁止驱逐数据。
Redis驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF持久化)和从机(主从连接)。