做阿里巴巴网站找谁,微信里怎么进入自己的公众号,重庆网上制作网站,搜索引擎优化的步骤有哪些1、非关系型数据库、快、高并发、功能强大
2、为什么快#xff1f;内存单线程 非阻塞的IO多路复用有效的数据类型/结构 3、应用#xff1a;支持缓存、支持事务、持久化、发布订阅模型、Lua脚本
4、数据类型#xff1a;
5 种基础数据类型#xff1a;String#xff08;字…1、非关系型数据库、快、高并发、功能强大
2、为什么快内存单线程 非阻塞的IO多路复用有效的数据类型/结构 3、应用支持缓存、支持事务、持久化、发布订阅模型、Lua脚本
4、数据类型
5 种基础数据类型String字符串、List列表、Set集合、Hash散列、Zset有序集合。3 种特殊数据类型HyperLogLog基数统计、Bitmap 位图、Geospatial (地理位置)。
string 底层是SDS简单动态字符串 二进制安全的数据类型 缓存token、图片的base64编码、简单计数
list 双向链表 应用 信息流展示 最新文章、最新动态 hash hashmap 应用对象数据存储场景
set hashset 应用需要存放的数据不能重复的场景比如点赞数 需要获取多个数据源交集、并集和差集的场景共同好友 需要随机获取数据源中的元素的场景 如抽奖系统、随机点名
Sorted Set 跳表 增加了一个权重参数 score使得集合中的元素能够按 score 进行有序排列还可以通过 score 的范围来获取元素的列表。 应用需要随机获取数据源中的元素根据某个权重进行排序的场景
5、redis内存管理
过期时间 string类型通过setex设置 其他类型通过expire设置
过期时间有利于缓解内存的消耗
删除策略定期删除随机抽取若干个设置了过期时间的key看是否过期
定期删除的频率 HZ 10hz 就是说。每秒钟进行10词尝试来查找并删除过期的key
惰性/懒汉式删除
为了避免key集中过期在设置键的过期时间时尽量随机一点
内存碎片Redis 存储数据的时候向操作系统申请的内存空间可能会大于数据实际需要的存储空间。频繁修改 Redis 中的数据也会产生内存碎片。
如何保证redis存的都是热点数据呢
内存淘汰策略 默认是no-eviction 禁止驱逐数据
6、redis事务
不支持原子性不支持持久化
改进——lua脚本确保写入的命令的正确性就可以保证执行的正常性否则错误的语句会报错但是之前已经执行的却不能回滚
7、redis性能优化
使用批量操作减少网络传输即减少RTT往返时间减少socket I/O成本 pipline客户端超时阻塞网络阻塞、工作线程阻塞 可以采用分割bigkey采用合适的数据结构来处理hotkey 处理 hotkey 会占用大量的 CPU 和带宽 如果突然访问 hotkey 的请求超出了 Redis 的处理能力Redis 就会直接宕机。这种情况下大量请求将落到后面的数据库上可能会导致数据库崩溃。 使用 Redis 自带的 --hotkeys 参数来查找。 解决hotkey 读写分离使用redis cluster 二级缓存慢查询命令
8、redis生产问题 缓解Mysql不存在也会返回一个空值 布隆过滤器 提前预热推荐针对热点数据提前预热将其存入缓存中并设置合理的过期时间比如秒杀场景下的数据在秒杀结束之前不过期。加锁看情况在缓存失效后通过设置互斥锁确保只有一个请求去查询数据库并更新缓存。 设置随机失效时间提前预热推荐针对热点数据提前预热将其存入缓存中并设置合理的过期时间比如秒杀场景下的数据在秒杀结束之前不过期。 如何保证缓存和数据库数据的一致性
旁路缓存模式更新数据库删除缓存。删除缓存失败的话重试
能否先删除缓存再更新数据库数据不一致
读写穿透 异步缓存写入Read/Write Through 是同步更新 cache 和 db而 Write Behind 则是只更新缓存不直接更新 db而是改为异步批量的方式来更新 db。
9、redis持久化
RDB持久化通过创建快照来获得存储在内存里面的数据在 某个时间点 上的副本
bgsave : fork 出一个子进程子进程执行不会阻塞 Redis 主线程默认选项。生成RDB快照文件
AOF持久化开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令Redis 就会将该命令写入到 AOF 缓冲区 server.aof_buf 中然后再写入到 AOF 文件中此时还在系统内核缓存区未同步到磁盘最后再根据持久化方式 fsync策略的配置来决定何时将系统内核缓存区的数据同步到硬盘中的。 AOF重写 当 AOF 变得太大时Redis 能够在后台自动重写 AOF 产生一个新的 AOF 文件这个新的 AOF 文件和原有的 AOF 文件所保存的数据库状态一样但体积更小。 AOF校验机制Redis 在启动时对 AOF 文件进行检查以判断文件是否完整是否有损坏或者丢失的数据。 校验和 Redis 保存的数据丢失一些也没什么影响的话可以选择使用 RDB。不建议单独使用 AOF因为时不时地创建一个 RDB 快照可以进行数据库备份、更快的重启以及解决 AOF 引擎错误。如果保存的数据要求安全性比较高的话建议同时开启 RDB 和 AOF 持久化或者开启 RDB 和 AOF 混合持久化
10、redis延时
redis过期时间监听 当一个key过期之后rendis发布一个key过期的事件到某个channel中 但是过期时间消息是在redis服务器删除key时发布的而不是一个key过期之后就会直接发布还可能会丢了消息多服务实例下消息重复消费redisson内置的延时队列 Redisson 使用 zrangebyscore 命令扫描 SortedSet 中过期的元素然后将这些过期元素从 SortedSet 中移除并将它们加入到就绪消息列表中。就绪消息列表是一个阻塞队列有消息进入就会被监听到。这样做可以避免对整个 SortedSet 进行轮询提高了执行效率
11、redis为什么要用分布式缓存
缓存服务可以部署在一台单独的服务器即使同一个相同的服务部署在多台机器上也是使用的同一份缓存。 并且单独的分布式缓存服务的性能、容量和提供的功能都要更加强大。
12、Redis Sentinel
实现 Redis 集群高可用只是在主从复制实现集群的基础下多了一个 Sentinel 角色来帮助我们监控 Redis 节点的运行状态并自动实现故障转移监控故障转移即把一台slave升级为master 通知即通知slave新的master连接信息配置提供即通知新的master连接信息给客户端那么senstial是如何判断节点是否下线呢 每秒对集群进行ping 主观自己认为 客观过半都认为
如何选择出新的master
在线的slave根据slave的优先级再根据复制进度如若还是选不出来就选用运行id小的slave 13、redis cluster
可以横向扩展缓解写压力和存储压力支持动态扩容和缩容
具备主从复制、故障转移senstiel集群等开箱即用的功能 slave不对外提供读的接口是为了保证redis cluster的高可用
redis cluster中有master出现故障不会对其他master产生影响
redis cluster 是通过哈希槽进行分配的 解耦了数据和节点之间的关系提升了集群的横向扩展性和容错性