Redis缓存数据库
1.什么是redis?
Redis是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万次的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。
它是一种非关系性数据库,是介于接口服务端和数据库的中间层。
比如一个査询接口,第一次査询从数据库査数据,査完之后我们把数据存入redis缓存中,第二次査就可以直接从缓存中读取数据,这就是它的用法。
2.什么数据存入redis缓存?
主要是一些复杂操作,耗费时间长的,比如数据库查询要100ms,但是redis只需要20ms。而且,在接下来的几个小时内,这个数据都不会变化,我们就可以存入缓存数据库,为什么对时间有要求呢?因为缓存中的数据一般都是有过期时间的,这个开发写代码可以设置。
3.redis为什么快?
redis是存在内存中的,数据库是存在磁盘中的。
4.为什么使用redis,它的优势是什么?
主要有以下几个原因:
1.读取速度快,因为缓存是写入内存中,普通数据库数据是写在磁盘中的,基于内存的相比于磁盘速度是快很多的,但是也有缺点,比如断电之后,内存中的数据会消失,磁盘则不会。
2.高并发,减轻数据库压力。一旦涉及大数据量需求,比如一些商品抢购等,或者主页瞬间访问量大的时候,磁盘读写上千上万次,有性能弊端。容易造成数据库瘫痪,服务器宕机。数据库顶不住,需要缓存分担一部分压力。
3.提升tps
5.redis的五种数据结构(常问)
字符串,哈希,列表,集合,有序集合
6.redis不同数据结构使用场景有哪些?
Redis支持多种数据结构,每种数据结构都有其特定的使用场景。以下是Redis不同数据结构的使用场景:
1.字符串(String):字符串是Redis中最基础的一种数据结构,适合存储用户数据,如用户ID、用户名、密码等。
2.列表(List):列表是一个有序的字符元素序列,适合存储多值数据,如最新动态历史记录等。
3.哈希(Hash):哈希特别适合存储与对象相关的多个字段和值。例如一个用户对象的所有信息(ID、姓名、年龄、地址、电话等)都存放在同一个哈希中,则可以方便的通过哈希的键获取这个用户对象的所有信息。
4.集合(Set):集合是一个无序的字符元素集合,特别适合进行数据去重、交集、并集和差集等操作。例如存储用户ID、关注者列表等
5.有序集合(Sorted Set):有序集合提供了另一种数据去重和排序的方式,它是一个有序的集合,存储的元素都可以有一个对应的分数(score),这个分数可以用来排序、查找和去重。例如存储文章和分值,可以按照点赞数或时间排名。
以上是Redis不同数据结构的一些典型使用场景,但不局限于此。在实际的应用中,数据结构的选择应该根据具体场景和需求进行综合考虑和优化。
7.雪崩,缓存穿透,缓存击穿
雪崩机制
假设数据库访问量是每秒5千请求,redis数据库可以抗住每秒4千请求。但是redis数据库因为意外宕机,那么这五千个请求就会全部打到数据库上。
这个时候数据库就挂掉了,这个时候如果没有特别的方案来处理这个故障,DBA直接重启数据库,那么马上又会被新的流量打死,这个就是redis雪崩机制。
缓存穿透
假设一个系统每秒5千请求,但是有4千是黑客恶意攻击发起的,缓存中查不到,数据库中也查不到。
比如说,缓存数据库id都是从1开始的,但是黑客发过来的请求id都是负数,所以缓存中查不到,就会直接打到数据库,数据库就会挂掉,这种就是缓存穿透。
解决方案:
对于查询不到的,统一设定一个默认值返回
缓存击穿
这个就是说某个缓存数key值,访问非常频繁,一直处于高并发访问,但是因为一些原因这个key失效,那么数据流量就把缓存击穿,瞬间打到数据库上,就像在屏风上凿开一个洞。
比如说一些,大key,热key
redis数据存储方式都是key,跟value的形式