redis的特点:
redis本质上是一个key-value类型的内存数据库,整个数据库系统加载在内存当中操作,定期通过异步操作把数据库数据flash硬盘上进行保存。因为是纯内存操作,redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知的最快的key-value数据库。redis出色的不仅仅是性能,还支持保存多种数据结构,并且单个value可以存储的最大限制是1GB,另外redis还可以对key-value设置过期时间
缺点是:数据库容易收到物理内存的限制,不能做海量数据的高性能读写,只适用于较小数据量的高性能操作何运算的场景。
1.redis为什么这么快
基于内存
使用多路I/O复用模型,非阻塞IO;
多种数据结构(hash、跳表等)
2.为什么使用单线程
因为 Redis 是基于内存的操作,CPU 不会成为 Redis 的瓶颈,而最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。
3.redis缓存三大问题
1.缓存穿透是指客户端请求的数据再缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。不断发起这样的请求,给数据库带来压力
缓存空对象、布隆过滤、 增强id的复杂度,避免被猜测id规律
做好数据的基础格式校验、加强用户权限校验、做好热点参数的限流
2.缓存雪崩是指在同一时间段大量的key同时失效或者redis服务器宕机,导致大量请求到达数据库,带来巨大压力。
给不同的key的TTL添加随机值
利用redis集群提高服务的可用性
给缓存业务添加降级限流策略
给业务添加多级缓存
3.缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务比较复杂的key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击
逻辑过期
互斥锁
4.先删后写还是先写后删
先删除缓存再更新数据库 脏读问题
先更新数据库再删除缓存 脏读几率小
标签:面试题,缓存,单线程,有关,redis,内存,key,数据库 From: https://www.cnblogs.com/yliunyue/p/17166836.html