这里写目录标题
#🌳 什么是Redis
redis是一款
非关系型数据库
,将数据以键值对的形式储存在内存中,读取速度快,支持多种数据类型,支持数据持久化。
🌳Redis基本数据类型
String(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)
🌳Redis的作用
缓存、计数、排行榜、数据排重、消息队列、分布锁
🌳Redis的线程模式
客户端的连接请求采用多线程,键值对读写命令采用单线程
注:Redis 6.0之前都是使用单线程
🌳Redis单线程模式速度快的原因:
1.基于内存操作,读写在内存进行
2.底层结构是哈希表,键值对应查找很快
3.读写操作仍是单线程
🌳Redis的持久化:
🍁RDB
将Redis数据以快照的形式存储在一个rbd文件中
可以在Redis.conf中配置save规则
注:Redis默认使用持久化方式
🍁AOF
以日志的形式记录的写操作指令,在恢复数据时采用将指令重新执行方法
🌳 Redis如何与mysql保持一致:
方法一.更新MySQL数据,更新Redis数据
注:Redis可能更新失败
方法二.删除Redis数据,更新mysql数据
注:多线程操作Redis可能还是MySQL之前的老数据
方法三.删除Redis数据,更新Mysql数据,等待若干秒删除Redis数据(延时双删)
🌳Redis事物
🍁什么是Redis事物:
Redis事物是一组命令的集合,将一组命令作为一个整体,执行过程中,不会被其他客户端命令请求打断
注:Redis事物中就算一组命令里有一个错误命令也不妨碍其他命令执行
🍁Redis事物操作:
multi(开启事物)
指令1
指令2
指令3
exec(执行事务)
注:java代码版本
redisTemplate.multi()//开启事物
//指令1
//指令2
//指令3
redisTemplate.exec()//执行事务
🌳主从复制
一台作为主机,多台作为从机(备份机),主机与从机数据完全一致,主机支持数据的读取与写入操作,而从机只有读取操作,主机数据写入,数据自动备份到从机上,完成读写分离操作
🌳哨兵模式
redis集群配置一个独立进程即哨兵,哨兵定期向每个Redis服务发送命令,等待redis服务的响应,从而达到监视多个redis实例的目的,
注:若主机宕机,哨兵会从从机里选举出一个作为主机
🌳 Key过期策略
1.惰性删除:key过期时,不会立马删除,等到下次使用他时,检测到过期,才会删除
2.定期删除:设置时间节点,扫描过期Key,将其删除
注:Redis两种方式均使用
🌳缓存穿透,缓存击穿,缓存雪崩
🍁缓存穿透
原因:访问数据在数据库中没有,redis没有
解决方法:
1.对参数进行检验
2.可以在redis设置key-null 注:空对象会设置一个较短过期时间
🍁缓存击穿
原因:热点信息key过期同时有大量请求到来
解决方法:
1.设置key过期时间用该注意,可以设置永不过期
2.给第一个访问此数据的请求加锁
🍁缓存雪崩
原因:在访问量很大情况下,大量key过期
解决方法:
1.随机设置过期时间
2.集群部署,
3.定时任务,若key快过期时,重新设置过期时间