面试:第十一章:缓存

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 面试:第十一章:缓存

redis的具体使用场景吗?

1.主要应用在门户网站首页广告信息的缓存。因为门户网站访问量较大,将广告缓存到redis中,可以降低数据库访问压力,提高查询性能。

2.应用在用户注册验证码缓存。利用redis设置过期时间,当超过指定时间后,redis清理验证码,使过期的验证码无效。

3.用在购物车模块,用户登陆系统后,添加的购物车数据需要保存到redis缓存中。

redis中对一个key进行自增或者自减操作,它是原子性的吗?

是原子性的。一个操作的不可以再分,操作要么执行,要么不执行。Redis的操作之所以是原子性的,是因为Redis是单线程的。对Redis来说,执行get、set以及eval等API,都是一个一个的任务,这些任务都会由Redis的线程去负责执行,任务要么执行成功,要么执行失败,这就是Redis的命令是原子性的原因。Redis本身提供的所有API都是原子操作,Redis中的事务其实是要保证批量操作的原子性。

数据库创建表时要考虑

a、大数据字段最好剥离出单独的表,以便影响性能

b、使用varchar,代替char,这是因为varchar会动态分配长度,char指定为20,即时你存储字符“1”,它依然是20的长度

c、给表建立主键,看到好多表没主键,这在查询和索引定义上将有一定的影响

d、避免表字段运行为null,如果不知道添加什么值,建议设置默认值,特别int类型,比如默认值为0,在索引查询上,效率立显。

e、建立索引,聚集索引则意味着数据的物理存储顺序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查询上优势显著,在频繁更新数据的字段上建立聚集索引,后果很严重,插入更新相当忙。

f、组合索引和单索引的建立,要考虑查询实际和具体模式

mysql中哪些情况下可以使用索引,哪些情况不能使用索引?mysql索引失效的情形有哪些?

1.一个字段的取值只有几种的字段不要使用索引。比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

2.频繁更新的字段不要使用索引

3.where 子句中使用!=或<>操作符,对字段进行 null 值判断(IS NULL /IS NOT NULL),使用 or 来连接条件,使用in 和 not in,对字段进行表达式操作,对字段进行函数操作,/ like ‘%输入符%’等条件,不要使用索引。否则将导致引擎放弃使用索引而进行全表扫描

4. 不要在 where 子句中的“=”左边进行函数(DAY(column)=…)、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

5.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

6.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引

7.使用varchar,代替char,这是因为varchar会动态分配长度,char指定为20,即时你存储字符“1”,它依然是20的长度

8.大数据字段最好剥离出单独的表,以便影响性能

9.给表建立主键

10.经常用到的列就最好创建索引

11.查询从索引的最左前列开始并且不跳过索引中的列;

12索引列上不操作

13加了范围会失效

14在JOIN操作中(需要从多个数据表提取数据时),MYSQL只有在主键和外键的数据类型相同时才能使用索引,否则即使建立了索引也不会使用。使用连接(JOIN)来代替子查询(Sub-Queries)

java中的多线程在你们的这个项目当中有哪些体现?

a,后台任务:如定时向大量(100W以上)的用户发送邮件;定期更新配置文件、任务调度(如quartz),一些监控用于定期信息采集

b,  自动作业处理:比如定期备份日志、定期备份数据库

c, 异步处理:如发微博、记录日志

Redis分布式锁理解

获取锁的时候,使用setnx加锁,并使用expire命令(this.redisTemplate.expire("max",tempTime,TimeUnit.SECONDS); )为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。

获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。

释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。

SETEX:如果 key 已经存在, SETEX 命令将覆写旧值。

SETNX:若给定的 key 已经存在,则 SETNX 不做任何动作。

项目添加Redis缓存后,持久化具体怎么实现的。

RDB:保存存储文件到磁盘;同步时间为15分钟,5分钟,1分钟一次,可能存在数据丢失问题。

AOF:保存命令文件到磁盘;安全性高,修改后立即同步或每秒同步一次。

上述两种方式在我们的项目中都有使用到,在广告轮播的功能中使用了redis缓存,先从redis中获取数据,无数据后从数据库中查询后保存到redis中

采用默认的RDB方式,在广告轮播的功能中使用了redis缓存,先从redis中获取数据,无数据就从数据库中查询后再保存到redis中

你有了解mysql的隔离级别吗?mysql默认的隔离级别是什么?

数据库事务的隔离级别有四种,隔离级别高的数据库的可靠性高,但并发量低,而隔离级别低的数据库可靠性低,但并发量高,系统开销小。

  1. READ UNCIMMITTED(未提交读)
  2. READ COMMITTED(提交读)
  3. REPEATABLE READ(可重复读)
  4. SERIALIZABLE(可串行化)

mysql默认的事务处理级别是'REPEATABLE-READ',也就是可重复读。

项目中关于表结构拆分,你们是业务层面的拆分还是表结构层面的拆分?

表结构层面的拆分。通过mycat数据库中间件完成数据库分表操作。

业务层面也有拆分,比如商品模块拆分成8张表来实现存储

使用MyCat分库分表?

分库

通过Mycat结点来管理不同服务器上的数据库,每个表最多存500万条记录

分表

重直切割,水平切割

MySql提供了EXPLAIN语法用来进行查询分析,在SQL语句前加一个"EXPLAIN"即可。mysql中的explain语法可以帮助我们改写查询,优化表的结构和索引的设置,从而最大地提高查询效率。

分布式架构session共享问题,如何在集群里边实现共享。

用了CAS,所有应用项目中如果需要登录时在web.xml中配置过滤器做请求转发到cas端工作原理是在cas登录后会给浏览器发送一个票据(ticket),浏览器cookie中会缓存这个ticket,在登录其他项目时会拿着浏览器的ticket转发到cas,到cas后根据票据判断是否登录

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
缓存 Java 应用服务中间件
面试官:如何实现多级缓存?
面试官:如何实现多级缓存?
183 1
|
3月前
|
缓存 NoSQL Java
面试官:如何保证本地缓存的一致性?
面试官:如何保证本地缓存的一致性?
187 1
|
6月前
|
存储 缓存 监控
【面试题精讲】MySQL-查询缓存
【面试题精讲】MySQL-查询缓存
|
6月前
|
缓存 NoSQL 安全
面试官考我Redis中的缓存穿透、缓存雪崩和缓存击穿? 拿捏!!!
面试官考我Redis中的缓存穿透、缓存雪崩和缓存击穿? 拿捏!!!
47 0
|
6月前
|
存储 缓存 Java
【面试题精讲】Java包装类缓存机制
【面试题精讲】Java包装类缓存机制
|
7月前
|
canal 缓存 NoSQL
面试官,如何保证缓存与数据库的数据一致性
面试官,如何保证缓存与数据库的数据一致性
|
7月前
|
缓存 Java 数据库连接
「Java面试」五年Java程序员去某东面试竟然在MyBatis缓存这翻车
一个5年工作经验的小伙伴,去面某东被问到MyBatis何时使用一级缓存,何时使用二级缓存?去之前还特地复习了MyBatis的相关知识,想着自己用MyBatis用得比较熟练了,竟然在这道题上翻车了。 今天,我给大家来分享一下MyBatis的缓存机制。
59 0
|
5月前
|
存储 缓存 NoSQL
Java面试题 -缓存
Java面试题 -缓存
83 0
|
1月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
6月前
|
消息中间件 缓存 Java
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?

热门文章

最新文章