Redis(一期)
2022-10-19 15:22:15 0 举报
AI智能生成
redis知识点总结
作者其他创作
大纲/内容
Redis的String能表达3种值的类型:字符串、整数、浮点数 100.01 是个六位的串
1、key和命令是字符串
2、普通的赋值
3、incr用于乐观锁incr:递增数字,可用于实现乐观锁 watch(事务)
4、setnx用于分布式锁当value不存在时采用赋值,可用于实现分布式锁
应用场景:
string字符串类型
list列表类型可以存储有序、可重复的元素获取头部或尾部附近的记录是极快的list的元素个数最多为2^32-1个(40亿)
1、作为栈或队列使用列表有序可以作为栈和队列使用
2、可用于各种列表,比如用户列表、商品列表、评论列表等。
list列表类型
Set:无序、唯一元素集合中最大的成员数为 2^32 - 1
比如:关注的用户,还可以通过spop进行随机抽奖
适用于不能重复的且不需要顺序的数据结构
set集合类型
SortedSet(ZSet) 有序集合: 元素本身是无序不重复的
每个元素关联一个分数(score)
可按分数排序,分数可重复
特点
由于可以按照分值排序,所以适用于各种排行榜。比如:点击排行榜、销量排行榜、关注排行榜等。
sortedset有序集合类型
sortedset(zset)有序集合类型
Redis hash 是一个 string 类型的 field 和 value 的映射表,它提供了字段和字段值的映射。每个 hash 可以存储 2^32 - 1 键值对(40多亿)。
对象的存储 ,表数据的映射
hash类型(散列表)
hash类型。
常用
1、用户每月签到,用户id为key , 日期作为偏移量 1表示签到
3、查询用户在线状态, 日期为key,用户id为偏移量 1表示在线
bitmap位图类型
geo是Redis用来处理位置信息的。在Redis3.2中正式使用。主要是利用了Z阶曲线、Base32编码和geohash算法
1、记录地理位置
2、计算距离
3、查找\"附近的人\"
geo地理位置类型
stream是Redis5.0后新增的数据结构,用于可持久化的消息队列。
消息ID的序列化生成
消息遍历
消息的阻塞和非阻塞读取
消息的分组消费
未完成消息的处理
消息队列监控
几乎满足了消息队列具备的全部内容,包括:
每个Stream都有唯一的名称,它就是Redis的key,首次使用 xadd 指令追加消息时自动创建。
Redis5.0新增一种:stream类型
不常用的
注意:Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)
key的类型是字符串。
1. 用:分割
3. 第二段放置主键值
4. 第三段放置列名
Redis的Key的设计
Redis数据类型选择和应用场景
频道/模式的订阅与退订
发布订阅的机制
在Redis哨兵模式中,哨兵通过发布与订阅的方式与Redis主服务器和Redis从服务器进行通信。这个我们将在后面的章节中详细讲解。Redisson是一个分布式锁框架,在Redisson分布式锁释放的时候,是使用发布与订阅的方式通知的,
使用场景:哨兵模式,Redisson框架使用
发布与订阅
Atomicity(原子性):构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。Redis:一个队列中的命令 执行或不执行
Consistency(一致性):数据库在事务执行前后状态都必须是稳定的或者是一致的。Redis: 集群中不能保证时时的一致性,只能是最终一致性
Isolation(隔离性):事务之间不会相互影响。Redis: 命令是顺序执行的,在一个事务中,有可能被执行其他客户端的命令的
Durability(持久性):事务执行成功后必须全部写入磁盘。Redis有持久化但不保证 数据的完整性
ACID回顾
Redis的事务是通过multi、exec、discard和watch这四个命令来完成的。
Redis的单个命令都是原子性的,所以这里需要确保事务性的对象是命令集合。
Redis将命令集合序列化并确保处于同一事务的命令集合连续且不被打断的执行
Redis不支持回滚操作
Redis事务
exec:执行命令队列
discard:清除命令队列
watch:监视key
unwatch:清除监视key
事务命令
事务的执行
Watch的执行
Redis的弱事务性
事务机制
事务
lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
游戏开发、独立应用脚本、Web应用脚本、扩展和数据库插件。
OpenRestry:一个可伸缩的基于Nginx的Web平台,是在nginx之上集成了lua模块的第三方服务器
OpenRestry是一个通过Lua扩展Nginx实现的可伸缩的Web平台,内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。
用于方便地搭建能够处理超高并发(日活千万级别)、扩展性极高的动态Web应用、Web服务和动态网关。
功能和nginx类似,就是由于支持lua动态脚本,所以更加灵活。OpenRestry通过Lua脚本扩展nginx功能,可提供负载均衡、请求路由、安全认证、服务鉴权、流量控制与日志监控等服务。
nginx上使用lua 实现高并发
Lua应用场景
创建并修改lua环境
Lua环境协作组件
EVAL/EVALSHA命令实现
EVAL命令
EVALSHA
SCRIPT命令
脚本管理命令实现
脚本复制
Lua脚本
慢查询设置
慢查询记录的保存
慢查询日志的阅览&删除
添加日志实现
1、尽量使用短的key,对于value有些也可精简,能使用int就int。
2、避免使用keys *、hgetall等全量操作。
3、减少大key的存取,打散为小key 100K以上
4、将rdb改为aof模式 rdb fork 子进程 数据量过大 主进程阻塞 redis性能大幅下降 关闭持久化 , (适合于数据量较小,有固定数据源)
5、想要一次添加多条数据的时候可以使用管道
6、尽可能地使用哈希存储
7、尽量限制下redis使用的内存大小,这样可以避免redis使用swap分区或者出现OOM错误内存与硬盘的swap
慢查询定位&处理
慢查询日志
实现监视器
向监视器发送命令信息
Redis监控平台
监视器
Redis扩展功能
Redis是内存数据库,宕机后数据会消失。
Redis重启后快速恢复数据,要提供持久化机制
Redis持久化是为了快速的恢复数据而不是为了存储数据
Redis有两种持久化方式:RDB和AOF
注意:Redis持久化不保证数据的完整性。
当Redis用作DB时,DB数据要完整,所以一定要有一个完整的数据源(文件、mysql)在系统启动时,从这个完整的数据源中将数据load到Redis中
数据量较小,不易改变,比如:字典库(xml、Table)
为什么要持久化
RDB执行流程(原理)
RDB文件结构
RDB的优缺点
RDB
AOF持久化实现
AOF原理
AOF重写、触发方式、混合持久化
AOF文件的载入与数据还原
AOF
RDB与AOF对比
应用场景
Redis持久化
RedisDB结构
结构信息概览
7种type
10种encoding
RedisObject结构
底层数据结构
maxmemory
expire数据结构
定时删除
惰性删除
主动删除
删除策略
缓存过期和淘汰策略
请求响应模式
请求数据格式
命令处理流程
协议响应格式
协议解析及处理
通信协议
文件事件
时间事件
aeEventLoop
aeMain
aeProcessEvent
事件处理机制
通讯协议及事件处理机制
Redis核心原理
组件选择/多级
缓存大小
key数量
读写峰值
命中率
过期策略
性能监控指标
缓存预热
架构设计
缓存穿透
缓存雪崩
缓存击穿
数据不一致
数据并发竞争
Hot Key
Big Key
缓存问题
缓存更新策略
不同策略之间的优缺点
与Mybatis整合
缓存与数据库一致性
watch
setnx
Redission分布式锁的使用
分布式锁的特性
ookeeper分布式锁的对比
分布式锁
分布式集群架构中的session分离
键值设计
命令使用
客户端使用
相关工具
删除BigKey
阿里Redis使用手册
Redis企业实战
主从配置
主Redis配置
从Redis配置
读写分离
数据容灾
作用
复制流程
同步数据集
心跳检测
原理与实现
主从复制
部署方案
搭建配置
执行流程
故障转移
哨兵leader选举
主服务器的选择
哨兵模式
分区的意义
分区的方式
client端分区
proxy端分区
部署架构
分片
容灾
官方cluster分区
集群与分区
Redis高可用方案
页面自身对某些元素或全部元素进行存储,并保存成文件。
页面缓存
当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。
直接使用浏览器的缓存数据
强制缓存
服务器资源未修改,使用浏览器的缓存(304);反之,使用服务器资源(200)。
协商缓存
浏览器缓存分类
浏览器缓存
传统互联网
原生APP中把数据缓存在内存、文件或本地数据库(SQLite)中。比如图片文件。
APP缓存
移动互联网
客户端缓存
可以缓存原生服务器的静态资源,比如样式、图片等。
常见的反向代理服务器比如大名鼎鼎的Nginx。
Web代理缓存
边缘缓存中典型的商业化服务就是CDN了。
CDN通过部署在各地的边缘服务器,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
CDN的关键技术主要有内容存储和分发技术。现在一般的公有云服务商都提供CDN服务。
边缘缓存
网络端缓存
数据库是用来存储和管理数据的。
MySQL在Server层使用查询缓存机制。将查询后的数据缓存起来。
K-V结构,Key:select语句的hash值,Value:查询结果
InnoDB存储引擎中的buffer-pool用于缓存InnoDB索引及数据块。
数据库级缓存
平台级缓存指的是带有缓存特性的应用框架。
比如:GuavaCache 、EhCache(二级缓存,硬盘)、OSCache(页面缓存)等。部署在应用服务器上,也称为服务器本地缓存。
平台级缓存
具有缓存功能的中间件:Redis、Memcached、EVCache(AWS)、Tair(阿里 、美团)等。
采用K-V形式存储。
利用集群支持高可用、高性能、高并发、高扩展。
分布式缓存
应用级缓存
服务端缓存
常见缓存分类
提升用户体验
减轻服务器压力
提升系统性能
使用缓存的优势
额外的硬件支出
高并发缓存失效
缓存与数据库数据同步
缓存并发竞争
使用缓存的代价
Main Topic
缓存的优势、代价
Cache Aside Pattern(常用)
Read/Write Through Pattern
Write Behind Caching Pattern
缓存的读写模式
多层次
数据类型
要做集群
缓存的数据结构设计
缓存架构设计思路
什么是Redis
Redis发展历史
Redis应用场景
Redis简介
Redis下载
Redis安装环境
Redis安装
前端启动
后端启动的关闭方式
命令说明
Redis启动
Redis单机版安装和使用
Redis简介和安装
Java程序访问Redis
Spring访问Redis
SpringBoot访问Redis
Redis客户端访问
Redis(一期)
0 条评论
下一页