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