个人网站成品,osx wordpress,今天头条新闻,流媒体网站开发pdf目录
Redis概述
应用场景
Redis的线程模式
数据持久化
1.Rdb#xff08;Redis DataBase#xff09;
2.Aof#xff08;Append Only File#xff09;
mysql与redis保持数据一致
redis事务
主从复制#xff08;Redis集群)
哨兵模式
key过期策略
缓存穿透、击穿、…目录
Redis概述
应用场景
Redis的线程模式
数据持久化
1.RdbRedis DataBase
2.AofAppend Only File
mysql与redis保持数据一致
redis事务
主从复制Redis集群)
哨兵模式
key过期策略
缓存穿透、击穿、雪崩
1.缓存穿透缓存中没有在mysql中也没有
2.缓存击穿数据在数据库中存在某个热点的key秒杀、抢购但是在Redis中过期了此时有大量请求查询mysql
3.缓存雪崩:访问量很大大量key失效 Redis概述
非关系型数据库以键值对的形式存储读写速度快数据持久化支持多类型数据。
应用场景
1.缓存 访问量大的秒杀、点赞 修改少的 存储验证码定时删除
2.计数器
3.排行榜(zset)
4.去重set
5.消息队列(list) 排号
6.分布式锁
Redis的线程模式
在6.0之前是客户端连接和读写数据上是单线程模式
在6.0之后在客户端连接上是多线程模式但在数据读写上是单线程的。 为什么使用单线程速度还很快 1.基于内存存储
2.底层存储数据结构为hash表o(1)
3.单线程模式避免了线程的切换性能消耗少并且单线程避免了死锁的发生。
数据持久化
因为数据存储在内存存在数据丢失以便在重启后恢复数据。
1.RdbRedis DataBase
在指定的时间间隔下将数据以二进制的形式写入磁盘默认为保存在 dump.rdb当符合一定条件时 Redis 会自动将内存中的数据进行快照并持久化到硬盘。 触发快照时期
save用来配置触发 Redis 的 RDB 持久化条件也就是什么时候将内存中的数据保存到硬盘。比如save m n。表示 m 秒内数据集存在 n 次 修改时自动触发 bgsave。 save 900 1 表示 900 秒钟内至少 1 个键被更改则进行快照。 save 300 10 表示 300 秒内至少 10 个键被更改则进行快照。 save 60 10000 表示 60 秒内至少 10000 个键被更改则进行快照。 若不持久化可以注释掉save
2.AofAppend Only File
以日志的形式进行存储将 Redis 执行过的所有指令记录下来读操作不记录。 appendon1y no #默认是不开启 yes 开启 appendfilename appendonly.aof #默认的文件名是 appendonly.aof可以通过 appendfilename 参数修改。
AOF 同步机制 appendfsync always #每次修改都会 sync。消耗性能 appendfsync everysec #每秒执行一次 sync可能会丢失这 1s 的数据(默认) 重启 redis 生效
mysql与redis保持数据一致
将mysql中的数据修改后redis中的数据需要与mysql中的数据保持一致
解决方式
1.先更新mysql中的数据再更新redis中的数据如果redis数据更新失败也会导致数据不一致。
2.先删除redis中的数据再更新mysql 中的数据再次查询的时候将数据添加到缓存中但是当redis中的数据删除后mysql正进行更新线程1进行查询右将mysql中的老数据查询到了redis中。
3.延迟双删先将redis中的数据进行删除如果查询数据时将mysql中的数据又存到redis中如果没有查询则mysql中的数据进行修改后再将数据存放在redis中。
redis事务
是为了保证一组命令作为整体来连续执行其他客户端不会打断执行。 Multi:开启事务 Exec执行事务 java代码实现事务控制 redisTemplate.multi();//开启redis事务 //命令1 //命令2 //命令3 redisTemplate.exec();//提交redis事务 主从复制Redis集群) 将一台 Redis 服务器的数据复制到其他的 Redis 服务器前者称为主节点(master)后者称为从节点(slave),数据的复制是单向的只能由主节点到从节点。实现数据的备份,即使其中一台机器宕机,其他机器还可以正常运行,保证数据的完整。 写入命令都直接发送到主机执行,主机将数据会自动备份到从机实现读写分离,分担redis服务的压力。 哨兵模式 在redis的集群中可以配置哨兵(进程), 哨兵定期会给每个redis服务发送命令,如果能接收到响应,说明redis服务正常 否则redis服务故障, 重点是监测主机,一旦主机宕机,哨兵机制会从从机中选举一个作为主机。 key过期策略 时间到了到底是key用不了了还是直接删除 1.惰性删除:当过期后标记为过期的状态当下次使用时进行删除 2.定期删除在定时的时间进行扫描过期的key然后删除 缓存穿透、击穿、雪崩 1.缓存穿透缓存中没有在mysql中也没有 解决方式id -1在Redis中设置key值为null 2.缓存击穿数据在数据库中存在某个热点的key秒杀、抢购但是在Redis中过期了此时有大量请求查询mysql 解决方式 1.热点key设置过期时间加长避免在访问量大的时候过期 2.在mysql查询时加锁查一次将结果存在Redis中就不用在mysql中查询 了。 3.缓存雪崩:访问量很大大量key失效 解决方式 1.随机设置key失效时间 2.集群 3.不设置失效时间 3. 定时任务在缓存失效前刷进缓存