开发流程及知识框架总结分享
2022-10-28 17:59:05 0 举报
AI智能生成
开发流程及知识框架总结分享
作者其他创作
大纲/内容
高级功能<br>
发布订阅
定义
基于channel实现
使用
发布<br>
订阅
缺点
没有持久化,会丢消息<br>
事务
定义
解决多个命令的原子性问题
特点
按命令进入队列的顺序执行
不会受到其他客户端的请求的影响<br>
使用
开启事务:multi
执行事务:exec
取消事务:discard
监视:watch
问题
在执行exec前发生错误
在执行exec后发生错误
LUA脚本
定义
轻量级脚本语言,可以在Redis中执行
好处
一次发送多个命令,减少网络开销
Redis将整个脚本作为一个整体执行,保持原子性<br>
对于复杂的命令组合,可以放在文件中实现复用
使用
Redis中调用Lua脚本
Lua脚本中调用Redis命令
在Redis中调用Lua脚本文件
Lua脚本缓存
lua-time-limit 5000<br>
script kill<br>
场景<br>
ip限流
内存回收
回收触发
key过期
内存达到上限,触发内存淘汰
过期策略
惰性过期
定期过期
淘汰策略
LRU
volatile-lru<br>
allkeys-lru
问题<br>
LFU
volatile-lfu
allkeys-lfu
random
volatile-random
allkeys-random<br>
volatile-ttl
noeviction
持久化
RDB
自动触发
配置规则
shutdown
flushall
手动触发
save
bgsave
优势<br>
劣势
AOF
AOF 持久化策略
AOF重写机制
优势
劣势
分布式
主从复制<br>
过程
主从连接<br>
数据同步
命令传播
问题:单点故障
哨兵机制<br>
过程<br>
监控
通知
自动故障转移
问题
主从切换会丢失数据
无法水平扩容
分布式方案
客户端Sharding
Jedis
代理Proxy<br>
Twemproxy
Codis
服务端分片
分片策略
虚拟槽
一致性hash
RedisCluster
优势
不足<br>
开发应用
Java客户端
Jedis
Luttuce:SpringBoot2.0后默认客户端
Redisson:基于Redis提供了许多分布式方案<br>
数据一致性问题<br>
先更新数据库,再删除缓存
重试
异步更新
先删除缓存,再更新数据库
延时双删
高并发问题
热key发现
客户端统计
代理层统计
服务端统计
缓存雪崩
缓存不过期,主动更新
过期时间加随机数<br>
缓存定时预先更新
针对key失效后的落库加互斥锁或队列<br>
缓存穿透
缓存空数据或特殊字符串
布隆过滤器
SQL和NoSQL
SQL(泛指关系数据库)
特性<br>
Table形式、基于行存储<br>
固定的schema
表与表之间存在关联<br>
支持SQL操作和复杂关联查询
通过支持事务提供数据一致性
产品
Oracle\MySQL\SOLServer
劣势<br>
水平扩展需要复杂的技术
表结构修改困难<br>
基于磁盘的读写压力比较大
NoSQL(Not Only SQL)
特性
存储非结构化数据
表与表之间无关联,容易扩展<br>
保证数据的最终一致性
支持海量数据存储和高并发读写
支持分布式,对数据分片、扩缩容简单<br>
产品<br>
kv存储:Redis、MemcacheDB<br>
文档存储:MongoDB<br>
列存储:HBase<br>
图存储:Neo4j<br>
对象存储、XML存储等<br>
NewSQL
结合了SQL和NoSQL的特性
TIDB
Redis描述<br>
特性<br>
丰富的数据类型
支持单机和分布式
功能丰富
replication
LUA脚本
LRU驱动事件
事务
不同级别的磁盘持久化
支持多种编程语言
高可用、集群
安装启动<br>
安装
Linux
Windows
Docker
配置<br>
<ul><li>redis.conf</li></ul>
<ul><li>启动时携带参数</li></ul>
<ul><li>config set动态设置</li></ul>
命令参考<br>
数据类型
string
描述:<i>Binary-safe strings</i>
存储类型:int\float\string<br>
使用场景<br>
缓存
数据共享<br>
分布式锁
全局ID<br>
计数器
限流
位统计
存储结构
外层哈希:hashtable存储模型<br>
SDS
为什么不用C语言字符串
SDS特点<br>
hash
描述:包含键值对的无序散列表
存储类型:value只能是字符串,不能嵌套其他类型
hash与string区别
使用场景
string能做的事情,hash都可以做<br>
存储对象类型的数据:电商购物车
不适合的场景<br>
存储结构
hash存储示例<br>
内层哈希
ziplist
hashtable
list
描述:双向有序、元素可重复
存储类型:存储有序的字符串
使用场景
充当队列和栈<br>
用户消息时间线
存储结构
早期版本
ziplist
linkedlist
3.2版本之后
quicklist
set<br>
描述:无序集合
存储类型:存储无序的字符串,最大存储量2^31-1(40亿)
使用场景
抽奖:随机获取元素
点赞、签到、打卡
收藏标签
商品筛选
交集<br>
并集
差集
用户关注、推荐模型
相互关注
我关注的人也关注了他
可能认识的人
存储结构<br>
intset
hashtable<br>
zset
描述:有序集合
存储类型:每个元素都有个score来实现排序
使用场景
排行榜<br>
热搜
存储结构
ziplist
skiplist+dict
其他
BitMaps
Hyperloglog
Geo
Streams
skiplist
维护
根据用户需求的变化和环境的变化,对应用程序进行全部或部分的修改
验收
用户验收
交付
向用户提交开发的目标安装程序
数据库的数据字典
用户安装手册
用户使用指南
需求报告
设计报告
测试报告
等双方合同约定的产物
测试
测试
按照测试执行方
内部测试
外部测试
按照测试条件
正常操作情况测试
异常情况测试
按照测试的输入范围
全覆盖测试
抽样测试
按照测试范围
模块测试
整体测试
测试完成,验收并完成最后的一些帮助文档
日后还有升级,修补等工作
编码
根据《软件系统详细设计报告》中对数据结构、算法分析、和模块实现等方面的设计要求,开始编码
分别实现目标系统的功能、性能、接口、界面等方面的要求
磨刀不误砍柴功,设计过程完成的好,编码效率就会极大的提高
要小心编码时不同模块之间的进度协调和协作
相互沟通
应急的解决手段
详细设计
描述实现具体模块所涉及到的
主要算法
数据结构
类的层次结构
调用关系
说明软件系统每一个程序的设计考虑,以便进行编码和测试
保证软件的需求完全分配给整个软件
详细设计应当足够详细,能够根据详细设计报告进行编码
概要设计
考虑软件系统的设计,为详细设计提供基础
基本处理流程
系统的组织结构
模块划分
功能分配
接口设计
运行设计
数据结构设计
出错处理设计
需求分析
初步了解需求
列出大功能模块
每个大功能下的小功能模块
需求明确时可以初步定义好少量的界面
深入了解和分析需求
做一份文档系统的功能需求文档
清楚列出系统大致的大功能模块
小功能模块
相关界面和界面功能
和用户确认需求
0 条评论
下一页