1.redis有哪些优缺点
优点:
读写速度快,读数据可以达到110000次/s,写的速度可以达到81000次/s
性能优异
支持事务
支持持久化
缺点:
由于基于内存,所以会给服务器带来压力
只能存储小数据量的数据,不能存储特别多的数据
2.为什么要用redis作为缓存
从两个方面来说:
第一个方面就是
高性能:因为redis是基于内存的,如果我们第一次访问数据库来查询数据的时候,这个过程是要经过磁盘的读写,过程会比较慢,所以我们使用redis作为缓存,这样的话操作redis就相当于直接操作内存,速度会很快,加入数据库中的数据改变的时候,就相应的改变redis中的数据即可.
第二个方面就是
高并发:redis对并发的承受量是远大于数据库的,所以一些数据我们可以放到redis中,这样的请求就不需要经过数据库
3.为什么要用redis而不用map做缓存
缓存分为本地缓存和分布式缓存,map属于本地缓存,redis属于分布式缓存,使用map的话只能是单体,单实例的情况下,缓存不具有一致性,而使用redis的话就属于分布式缓存,每个实例都会得到一份数据,实现了缓存的一致性
4.redis为什么这么快
1.redis是完全基于内存的,所以我们访问redis就相当于直接访问内存,避免了读写磁盘的过程,所以会非常快
2.redis的数据结构和其他技术的不同,很简单,为自己设定
3.redis是单线程的,避免了多线程的一些操作,也不用考虑多线程时候的一些问题,也不需要进行加锁,避免了死锁的问题
4.redis使用的是多路io复用,非阻塞io
5.redis的协议和其他的协议不同,它自己构建了属于自己的vm机制
5.redis有哪些数据类型,每个的应用场景
1.string类型:可以存储字符串,整型和浮点型,基本用于存储简单的数据,比如项目中的短信验证码就可以存储到这里面,还可以对整型和浮点型进行自增或自减的操作
2.hash类型:是一个无序的散列表,可以对键值对的存储移出等操作,我们一般用hash这种类型存储一个对象的信息
3.list:无序的列表,可以对它进行头尾的压入和弹出等操作,我们一般用它存储一些列表,比如文章列表,粉丝列表等
4.set类型:无序的集合,可以用sset等一些命令进行操作,我们一般用于存储一个用户所拥有的一些,也就是相当于id-list,通过id查询list,最厉害的操作就是可以对集合进行交集差集并集的操作,可以实现共同好友的功能
5.zset类型:有序的集合,相当于set的升级版,我们可以通过zset来存取一些排行榜,实现排行榜的功能,可以通过首字母,数据大小进行排序都可以
在不同的场景使用不同的数据结构,也可以提高我们的开发效率,也可以优化redis的性能
6.redis的持久化机制AOF和RDB
1.RDB持久化:相当于一个数据的快照,保存在服务器中,我们可以设定它的多久持久化一次,但是这样的话加入正在持久化的时候服务器宕机了,就会丢失一部分数据,只适用于对数据要求不严格的情况下,它有一个子进程来进行持久化,不影响我们对redis的操作,保证了redis的高性能,但是数据相对不安全
2.AOF持久化:它相对于RDB持久化是安全的,它有一个日志文件记录着我们执行过的所有命令,当服务器重启的时候,它会重新执行我们所执行过的命令,这样的话会恢复所有的数据,就相对于安全
7.过期键的删除策略
1.定时过期:我们会设置一个过期时间,到了这个时间清除对应的key
2.惰性过期:只有当我们访问到相应的key的时候,才会判断这个key是否已经过期,再进行清除
3.定期过期:我们定期会遍历key,来清除已经过期的key
10. redis是单线程的吗
是单线程,但是使用了多路io复用技术,是非阻塞io,提高了效率
11.redis事务的三个阶段
1.multi
2.命令入队
3.exec
12.redis的事务保证原子性吗,支持回滚吗
redis的命令保证原子性,但是事务不保证原子性
不支持回滚,如果有一条命令出错,则继续执行未执行的命令
13.哨兵模式
集群的一系列,操作即可
14.redis分布式锁
15.缓存雪崩的解释和解决方案
是指redis和数据库中都存在的数据,在某一时间redis的大量数据过期,导致访问的压力都给了数据库,导致数据库崩溃
解决:
设置不同的过期时间,以免同时过期
在并发量不是很大的时候,加锁,排队访问
16.缓存穿透的解释和解决方案
是指redis中没有而数据库中存在的数据,某一时间并发访问
数据,矛头都指向了数据库,造成压力过大崩溃
解决:布隆过滤器:将所有可能被访问的数据放到一个bigmap中,如果访问的数据不在bigmap中则被拦截
17.缓存击穿的解释和解决方案
是指redis和数据库中都没有的数据,此时在redis中没有访问到,又都指向数据库,导致压力过大崩溃
解决:设置热点数据永不过期