redis.md
redis
[toc]
一、redis常用的数据结构
list ,map,hash,set,zset
二、redis为什么快
单线程,纯内存操作,数据结构简单,使用i/o多路复用
三、redis优缺点
- 优点:读写速度块;数据可持久化;支持事务数据结构丰富hash,set,zset,list;支持主从复制
- 缺点:容量受限物理机;不具备容错恢复功能;在线扩容难。
四、应用场景
计数器;缓存,如mybatis;会话缓存,如分布式环境存session;分布式锁
五、 redis持久化
- RDB:按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的 save参数来定义快照的周期。
- AOF:AOF持久化是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。
六、 redis如何做分布式锁
Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系Redis中可以使用SETNX命令实现分布式锁。
原理:当且仅当key不存在,将 key的值设为value。若给定的 key已经存在,则SETNX不做任何动作返回值:设置成功,返回1。设置失败,返回0 。
七、什么是缓存雪崩,怎么避免?
- 缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
- 解决方案
1.缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。- 一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。
- 给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。
八、 什么是缓存穿透,怎样避免?击穿?
缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。
解决方案
- 接口层增加校验,如用户鉴权校验,id做基础校验,id小于等于0 的直接拦截;
- 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用》。这样可以防止攻击用户反复用同一个id暴力攻击
- 采用布隆过滤器
击穿:某个key的高并发访问
九、 如何确保缓存与数据库双写是的数据一致性
读请求和写请求串行化,在一个内存队列。(尽量不用)
十、假如 Redis 里面有1亿个key,其中有10w 个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?
- keys:使用keys指令可以扫出指定模式的 key列表。但可能会让线程阻塞。
- scan:可以解决阻塞,但key有可能重复,需要再做次去重,费时。
缓存常见问题
redis.md
http://example.com/8368.html