- 如果你想领取
3700G
免费学习资料、或者加入技术交流群(禁止发广告),可以文末+我微信,专注技术不闲聊
- protocol buffer是Google的一种独立的数据交换格式,可运用于多种领域。
- protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。
- google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。
- 可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
- 简单说来 Protobuf 的主要优点就是:简洁,快。
- 因为Protocol Buffer 信息的表示非常紧凑,这意味着消息的体积减少,自然需要更少的资源。比如网络上传输的字节数更少,需要的 IO 更少等,从而提高性能。
- 对于一条消息,用 Protobuf 序列化后的字节序列为:
- 而如果用 XML,则类似这样:
- PM2这个轮子造起来,可能比redis不相上下,以后有机会可以写一个,我们今天直接用PM2启动即可达到守护进程效果
实现redis数据持久化
-
redis数据持久化两种方式
- RDB:指定的时间间隔内保存数据快照
- AOF:先把命令追加到操作日志的尾部,保存所有的历史操作
- 这里持久化,其实有点麻烦,redis的key数据类型非常丰富
-
redis数据持久化用来做什么?
- redis数据存储在内存中,如果服务器重启或者redis挂了/重启,如果不做数据持久化,那么数据就丢了
先是实现AOF,追加到日志尾部
- 在服务端接受到redis.set的时候进行日志追加
- 这样写是有问题的,到时候取值的时候不好取,这里可以用到我之前手写富文本编辑器的原理,用零宽字符占位,然后读取数据时候再替换分割~
- 一种不可打印的Unicode字符, 在浏览器等环境不可见, 但是真是存在, 获取字符串长度时也会占位置, 表示某一种控制功能的字符.
- 零宽不连字 (zero-width non-joiner,ZWNJ)放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。
- 零宽连字(zero-width joiner,ZWJ)是一个控制字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。
- 左至右符号(Left-to-right mark,LRM)是一种控制字符,用于计算机的双向文稿排版中。
- 右至左符号(Right-to-left mark,RLM)是一种控制字符,用于计算机的双向文稿排版中。
- 将零宽度字符插入文本中,干扰关键字匹配。爬虫得到的带有零宽度字符的数据会影响他们的分析,但不会影响用户的阅读数据。
- 将自定义组合的零宽度字符插入文本中,用户复制后会携带不可见信息,达到传递作用。
- 在服务器监听端口事件中进行数据预热,读取磁盘数据到内存中
- 上面这样写,其实有问题,为了更好的分割提取磁盘冷数据,我换了下分割的零宽字符
- 插入后的数据变成了这样
- 读取数据算法,也是要思考下
- 在redis出错的时候,将数据刷入磁盘中以及定期持久化数据,如果要实现,也可以类似的思路,当然这并不是redis的真正实现,只是一个模拟.
如果感觉写得不错,关注下微信公众号 [前端巅峰
]
- 我是Peter,架构设计过20万人端到端加密超级群功能的桌面IM软件,我的微信:
CALASFxiaotan
- 另外欢迎收藏我的资料网站:前端生活社区:
https://qianduan.life
,感觉对你有帮助,可以右下角点个在看,关注一波公众号:[前端巅峰
]