开头:
在这里插入图片描述

1、Redis基本概念

  • Redis是一个<K,V>键值对的数据库,大量操作都是在内存中完成的,读写的效率很高,因此广泛用于缓存
  • Redis是单线程的
  • Redis实际上是采用了线程封闭的观念,把任务封闭在一个线程,自然避免了线程安全问题
  • Redis的数据类型:String、hash、set、list、sorted set

Redis使用单线程+多路IO复用
在这里插入图片描述

2、为什么使用Redis?

在业务系统中,并发量非常大,使用Redis作为中间件缓存,可以大大的减轻Mysql的压力。

3、Redis的作用?

当系统的并发量比较高的时候,请求会直接落在Mysql上,在中间插入了缓存Redis,所有的请求先到Redis中查,如果查到了直接返回,请求就不会落在Mysql上,减轻了Mysql的压力。如果没查到,再去Mysql中查,查到结果后,将数据放到Redis中,方便下一次获取。

4、Redis如何保证与数据库数据一致?

更新的时候,先删除缓存,再更新数据库,读的时候,先读缓存,如果没有的话,就去数据库中读,同时将数据放到缓存,并返回响应。

5、缓存穿透?缓存雪崩?

5.1缓存穿透:

概念:一个恶意的请求,假如有3000万个请求,要查询数据id=-1的,Redis缓存中查不到数据,然后去Mysql中查,Mysql中也查不到,那么3000万个请求全落在Mysql,永远起不来服务(恶意请求,永远查不到数据)。

解决: 在Redis中查不到,就去查Mysql,查Mysql结果为空,也将他添加到Redis缓存中,添加空值
​ 给Key设置失效时间

5.2缓存雪崩:

概念:内部系统在启动服务器时,都要去连接数据库,请求量比较大的时候,一些系统启动失败,连接不上Mysql。
解决:预热(手动将一些数据导到Redis中)

6、Redis持久化方式:

6.1、RDB:

​ 在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘 等介质上。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式效率高

6.2、AOF:

​ 将 redis 执行过的所有写指令记录下 来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现 数据恢复了。

​ 其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

7、Redis数据结构

五种数据结构:String、List、hash、set、zset
【redis数据结构 – strings】
在这里插入图片描述

【redis数据结构 – list】
在这里插入图片描述

【redis数据结构 – set】
在这里插入图片描述

【redis数据结构 – zset】
在这里插入图片描述

【redis数据结构 – 哈希】
hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
在这里插入图片描述

8、Redis事务处理:

1、事务

Redis事务的作用:串联多个命令防止别的命令插队

1.MULTI用来组装一个事务;
2.EXEC用来执行一个事务;
3.DISCARD用来取消一个事务;
4.WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行。

​ 从输入multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入exec后,Redis会将之前命令队列中的命令依次执行,组队的过程中可以通过discard来放弃组队。

在这里插入图片描述

QUEUED的字样,这表示我们在用MULTI组装事务时,每一个命令都会进入到内存队列中缓存起来,如果出现QUEUED则表示我们这个命令成功插入了缓存队列,在将来执行EXEC时,这些被QUEUED的命令都会被组装成一个事务来执行。

WATCH本身的作用是“监视key是否被改动过”,而且支持同时监视多个key,只要还没真正触发事务,WATCH都会尽职尽责的监视,一旦发现某个key被修改了,在执行EXEC时就会返回nil,表示事务无法触发。

在这里插入图片描述

2、事务的错误处理:

  • 在组队过程中发生错误,执行时所有的队列都会被取消
  • 执行阶段某个命令报错,只有报错的命令不会被执行,而其他的命令都会执行
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐