Redis面试注意

Redis面试注意

端口:6379

1,常用数据结构

string,hash,list,set,zset

2,缓存雪崩,击穿,穿透

雪崩:缓存中大量key同一时刻同时过期,或者Redis直接宕机,直接访问数据库

  1. 不同的key,设置不同的过期时间,让缓存失效的时间尽量均匀
  2. 二级缓存

击穿:大量用户同时访问一个缓存key,缓存过期失效了,直接访问数据库

1.设置key不过期

2.设置分布式锁

穿透:访问不存在的key,

1.对查询结果为空的情况也进行缓存,对不存在的key进行过滤

3,持久化方式

rdb:把数据持久化到磁盘中

aof:把执行过的指令记录下来,持久化到aof 文件

4,怎么保证缓存和数据库数据的一致性

1、淘汰缓存

复杂的数据结构缓存时,一般推荐选择淘汰缓存。

2、选择先删除缓存,再更新数据库(解决:延时双删策略)

先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。

3、先更新数据库,再删除缓存(解决:监听binlog同步)

更新数据库成功,如果删除缓存失败或者还没有来得及删除,那么,其他线程从缓存中读取到的就是旧值,还是会发生不一致。

延时双删策略

为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再sleep一段时间,然后再次删除缓存
public void write(String key,Object data){
     redisUtils.del(key);
     db.update(data);
     Thread.Sleep(100);
     redisUtils.del(key);
}

5,实现分布式锁

1,setnx

2,Redission

6,过期键的删除策略

1,定时删除:在设置键的过期时间的同时,创建一个定时器 timer

2,惰性删除:每次获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键

3,定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键

redis实际使用的过期键删除策略是定期删除策略和****惰性删除策略****:

7,淘汰策略

1,noeviction(默认策略) :对于写请求不再提供服务,直接返回错误

2,allkeys-lru:从所有key中使用LRU算法进行淘汰(LRU算法:即最近最少使用算法)

3,volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰

4,allkeys-random:从所有key中随机淘汰数据

5,volatile-random:从设置了过期时间的key中随机淘汰

6,volatile-ttl:在设置了过期时间的key中,淘汰过期时间剩余最短的

8,使用redis记录上亿用户连续登录天数

二值操作判断的基本可以使用 BitMap ,三个参数(key,index,0/1)

常见业务有用户签到、打卡、统计活跃用户、统计用户在线状态、实现布隆过滤器

如签到功能:

​ key存用户id,

​ index偏移量为日期,

​ 0或1


日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com

×

喜欢就点赞,疼爱就打赏

相册 说点什么