一.redis的使用场景
redis经常被用于缓存,秒杀,分布式锁等场景的重要基础
PUT/GET/DELETE/SCAN是一个键值数据库的基本操作集合。
PUT: 新写入或更新一个key-value对;
GET: 根据一个key读取相应的value值;
DELETE:根据一个key删除整个key-value对;
SCAN:查询一个用户在一段时间内的访问记录。根据一段key的范围返回相应的value值。
二.键值数据库的设计架构
一个键值数据库包括了访问框架,索引模块,操作模块和存储模块四个部分
访问模式通常有两种:
libsimplekv.so,以动态链接库的形式链接到自己的程序中,提供键值存储功能;
Socket通信的形式对外提供键值对操作,这种形式可以提供广泛的键值存储服务。
三.如何定位键值对的位置?
索引的作用是让键值数据库根据key找到相应value的存储位置,进而执行操作。
索引的类型有很多,常见的有哈希表,B+树,字典树等,不同的索引结构在性能,空间消耗,并发控制等方面具有不同的特征。
memcached和redis采用哈希表作为key-value索引,而RocksDB采用跳表作为key-value的索引
高性能随机访问特性可以与哈希表O(1)的操作复杂度相匹配。
四.从 SimpleKV 演进到 Redis
SimpleKV和Redis的对比:
【数据结构】缺乏广泛的数据结构支持:比如支持范围查询的skip等数据结构
【高可用】缺乏哨兵和主从模式
【横向扩展】缺乏集群和分片功能
【内存安全性】缺乏内存过载时key淘汰算法支持
【内存利用率】没有充分对数据结构优化提高内存利用率,例如使用压缩性的数据结构
【事务性】无法保证多个操作的原子性