redis面试常问

Redis

优点:速度快

缺点:只适合存储一些较为简单的数据,不合适复杂查询的数据,不适合持久化储存海量数据

持久化:

**RDB:**把数据以快照的形式保存在磁盘上。save,bgsave,自动化redis.conf

优点:全量备份适用于备份和灾难恢复

缺点:快照持久化期间修改的数据不会被保存

**AOF:**开启AOF后RDB默认会失效

优点:AOF可以更好的保护数据不丢失

缺点:AOF日志文件通常比RDB数据快照文件更大

Redis集群:

​ 主从复制:

​ 主备切换(哨兵):

​ cluster集群(卡槽):

可能遇到的问题

缓存击穿:

​ 原因:某个热门key突然过期

  1. 热门数据设置永不过期
  2. 加互斥锁

缓存穿透:

​ 原因:请求缓存与数据库中都没有的数据

  1. 布隆过滤器
  2. 从数据库中也没有取到数据时,将key-null存入redis,设置短暂的有效时间
  3. 加互斥锁

缓存雪崩:

​ 原因:大量缓存一段时间内集中过期了

  1. 缓存失效时间设为随机值
  2. 热点数据永不过期
  3. 互斥锁
  4. 双缓存

五种常用的数据类型

String(字符串): 浏览量和分布式锁

​ setnx 如果不存在,则set 用作分布式锁

​ psetex 生存时间毫秒

​ setex 生存时间秒

​ decr 数字减一

​ incr 数字加一

Hash(哈希表):实现购物车,相当于Map<String,Map<object,object>>

​ Hgetall 返回所有的域和值

​ HDel

​ HLen 域的数量

​ Hincrby 域的值加上增量

​ hval

List(列表)实现消息流

​ LRange之类

Set(集合)抽奖,点赞,关注,收藏

​ Smembers 返回集合中所有的成员

​ Srandmember key [] 返回集合中随机元素 抽奖

​ Sinter 交集

​ Sunion 并集

​ SDiff 差集

Z-Set(有序集) 热搜

​ 跳表/压缩列表

​ 跳表:空间换时间

其他不常用 bitmap位图、hyperloglogs统计、geospatial地理位置

setnx+lua脚本实现分布式锁

如果不使用lua脚本的话,需要multi开启一个事务,watch之类,事务乐观锁机制

分布式锁:redis和zookeeper

redis:ap 异步复制可能造成锁丢失

zookeeper:cp

Synchnorized和ReentrantLock单机锁无法解决分布式超卖现象。

redis分布式锁的两大问题:

1.如何确保redisLock过期时间大于业务执行时间

2.集群下锁丢失的问题

redis内存配置

一般配3/4,默认是全部。redis满了会报OOM

删除策略

1.定时删除 cpu很忙

2.惰性删除 对内存不友好

3.定期删除 每隔一段时间执行一次,删除过期的键操作(随机抽取)

内存淘汰策略

1.noveiction:不会驱逐任何key

2.allkeys-lru:对所有的key使用lru算法进行删除

3.volatile-lru:对设置过期时间的key使用lru算法

4.allkeys-random:对所有的key随机删除

5.volatile-random:对设置了过期时间的key随机删除

6.volotile-ttl:要过期的key删除

7.allkeys-lfu:对所有的key使用lfu算法进行删除

8.volatile-lfu:对设置了过期时间的key进行lfu算法进行删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值