Redis(一)

最简单的键值数据库成为SimpleKv(具有组建的键值数据库架构),其中key是String类型,value是基本类型,比如:String(在JAVA中不是基本类型) 整型等。所支持的方法有put,get,delete。其基本内部架构有访问框架,索引模块,操作模块和存储模块。在现实情况下redis在设计通信模块时(属于访问框架)需要考虑到:如果采用单线程就有可能造成堵塞,降低效率;如果采用多线程就要设计共享资源。
redis为什么采用哈希表作为索引:常见的索引类型很多,如哈希表,B+树,字典树。一般而言,内存键值数据库采用哈希表作为索引,很大一部分原因在于,其键值数据基本都是保存在内存中的,而内存的高性能随机访问特性可以很好地与哈希表O(1)的操作复杂度相匹配。

如何实现重启后快速提供服务呢?

在进行PUT和DELETE操作的时候常常需要对内存空间进行操作。SimpleKV采用了最常用的内存分配器glibc的malloc(动态分配内存的函数)和free(释放空间的函数)。由于数据库的键值对通常大小不统一,glibc的表现并不算好。一旦保存的键值对数据规模过大,就可能造成比较严重的碎片问题。SimpleKV虽然依赖内存来保存数据,提供快速访问,但是为了能让他在重启后快速提供服务,就添加了持久化功能,由于磁盘管理要比内存管理复杂,SimpleKV直接采用了文件形式存储,将键值数据通过调用本地文件系统的操作接口保存在磁盘上。此时,SimpleKV只需要考虑合适将内存中的键值数据保存到文件中就可以了。一:对于每一个键值对,SimpleKV都对其进行落盘保存,这虽然让SimpleKV的数据更加可靠,但是,因为每次都要写盘,所以性能会受到很大影响。二:SimpleKV周期性的吧内存中的键值数据保存到文件中,这样可以避免频繁写盘操作的性能影响。但增加了数据丢失的风险。

用SimpleKV来对比redis:
redis主要通过网络框架进行访问,而不再是动态库,这使得redis可以作为一个基础性的网络服务进行访问,扩大了redis的访问范围。
redis中的value类型十分丰富,因此有更多操作,如面向列表LPUSH/LPOP,面向集合的SADD/SREM等。
redis的持久化模块支持两种方式:日志(AOF)和快照(RDB),这两种方式具有不同的优劣势,影响到redis的访问性能和可靠性。
SimpleKV是个简单的单机键值数据库,但是redis支持高可用集群和高可扩展集群,以你,redis中包含了相应的集群功能支持模块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值