当前位置:网站首页>从SimpleKV到Redis
从SimpleKV到Redis
2022-06-28 12:10:00 【紫罗兰与海棠】
SimpleKV
一、key-value数据模型
对于键值数据库而言,基本的数据模型是 key-value 模型。从使用的角度来说,不同 value 类型的实现,不仅可以支撑不同业务的数据需求,而且也隐含着不同数据结构在性能、空间效率等方面的差异,从而导致不同的 value 操作之间存在着差异。
二、操作接口
基本操作无外乎增删改查。
- PUT:新写入或更新一个 key-value 对;
- GET:根据一个 key 读取相应的 value 值;
- DELETE:根据一个 key 删除整个 key-value 对。
三、键值对的存储
键值对的存储是一个非常重要的设计问题:键值对保存在内存还是外存?
- 保存在内存的好处是读写很快,毕竟内存的访问速度一般都在百 ns 级别。但是,潜在的风险是一旦掉电,所有的数据都会丢失。
- 保存在外存,虽然可以避免数据丢失,但是受限于磁盘的慢速读写(通常在几 ms 级别),键值数据库的整体性能会被拉低。
如何进行设计选择,我们通常需要考虑键值数据库的主要应用场景
四、基本组件

(一) 访问模式
- 通过函数库调用的方式供外部应用使用
- 通过网络框架以 Socket 通信的形式对外提供键值对操作
(二) 定位键值对的位置
SimpleKV 需要查找所要操作的键值对是否存在,这依赖于键值数据库的索引模块。索引的作用是让键值数据库根据 key 找到相应 value 的存储位置,进而执行操作。
- Memcached 和 Redis 采用哈希表作为 key-value 索引
- RocksDB 则采用跳表作为内存中 key-value 的索引
一般而言,内存键值数据库(例如 Redis)采用哈希表作为索引,很大一部分原因在于,其键值数据基本都是保存在内存中的,而内存的高性能随机访问特性可以很好地与哈希表 O(1) 的操作复杂度相匹配。
(三) 不同操作的具体逻辑
SimpleKV 的索引模块负责根据 key 找到相应的 value 的存储位置。
(四) 重启后快速提供服务
分配器是键值数据库中的一个关键因素。
- 对于每一个键值对,SimpleKV 都对其进行落盘保存,这虽然让 SimpleKV 的数据更加可靠,但是,因为每次都要写盘,SimpleKV 的性能会受到很大影响。
- SimpleKV 只是周期性地把内存中的键值数据保存到文件中,这样可以避免频繁写盘操作的性能影响。但是,一个潜在的代价是 SimpleKV 的数据仍然有丢失的风险。
五、从SimpleKV到Redis

边栏推荐
- 2022年理财产品的常见模式有哪些?
- 请问通达信股票软件可靠吗?在上面交易股票安全吗?
- Open3d manual clipping point cloud
- Multi dimensional monitoring: the data base of intelligent monitoring
- What is the difference between internal oscillator, passive crystal oscillator and active crystal oscillator?
- 双缓冲绘图
- 【C语言】NextDay问题
- Software test interview classic + 1000 high-frequency real questions, and the hit rate of big companies is 80%
- 搭建学习环境
- 开源项目维权成功案例: spug 开源运维平台成功维权
猜你喜欢
随机推荐
张同学回应首场直播带货
Is there a threshold for opening futures accounts? How to open futures accounts safely on the Internet
Deep learning has a new pit! The University of Sydney proposed a new cross modal task, using text to guide image matting
Unity导入资源后还手动修改资源的属性?这段代码可以给你节约很多时间:AssetPostprocessor
Self use demo of basic component integration of fluent
【Unity编辑器扩展实践】、利用txt模板动态生成UI代码
Some tips on string conversion
C语言 sprintf函数使用详解
[unity Editor Extension Foundation], editorguilayout (I)
IDEA全局搜索快捷设置
运维思考 | 你知道CMDB与监控是什么关系吗?
洛谷_P1303 A*B Problem_高精度计算
Chendanqi, Fang Fei, guquanquan and Li Bo won the prize, and the list of Sloan research award in 2022 was released
Truly understand triode beginner level chapter (Classic) "suggestions collection"
MapReduce项目案例1
【Unity编辑器扩展实践】、查找所有引用该图片的预制体
Leetcode 705. 设计哈希集合
MapReduce project case 3 - temperature statistics
Is it feasible to be a programmer at the age of 26?
[unity Editor Extension practice], find all prefabrications through code





![[C language] about scanf() and scanf_ Some problems of s()](/img/d1/e3d0b845e699c8c1fe3eb9f3b250e1.png)



