一个可持久化的大容量 Redis 存储服务Pika

一个可持久化的大容量 Redis 存储服务Pika
最新回答
一清北华

2020-07-02 08:47:58

Pika 是一个高度可持久化的大容量 Redis 存储服务,它能够兼容 Redis 的 string、hash、list、zset、set 等数据结构的大部分接口,解决 Redis 存储数据量巨大时内存不足的问题,并且支持主从备份功能,通过 slaveof 命令实现全同步或部分同步。Pika 还能在 twemproxy 或 codis 中用于静态数据分片。



Pika 实现了类 Redis 数据库,其底层数据存储采用的是 rocksdb。这样做是因为内存数据库存在一定的缺陷。Pika 目前可以达到 Redis 性能的 80%,前提是在使用时避免过多的 list 数据结构。



Pika 在实现上拥有以下特点激念:



  • 兼容 Redis 的 string、hash、list、zset、set 等数据结构。

  • 实现主从备份,支持全同步和部分同步。

  • 在 twemproxy 或 codis 中实现静态数据分片。



在安装和编译 Pika 时,可以通过以下步骤在 CentOS 或 Ubuntu 系统上操作:



  • 在 CentOS 上:安装依赖,编译并安装 Pika。

  • 在 Ubuntu 上:安装依赖,编译并安装 Pika。



在 Pika 的实现中,Blackwidow 是其核心组件,它基于 RocksDB 进行封装,使得只支持 KV 存储的 RocksDB 能够支持多种数据结构。Blackwidow 目前支持五种数据结构的存储,具体实现方式如下:



  • 字符串结构存储:使用 key 和 value,value 后面添加了 4 字节用于存储 timestamp,实现 Redis 中的 expire 功能。

  • 哈希结构存储:由 meta_key、meta_value 和键铅兄 data_key、data_value 构成,meta_key 和 meta_value 存储 Hash 表的信息,data_key 和 data_value 存储具体的数据。

  • 列表结构存储:由 meta_key、meta_value 和 data_key、data_value 构成,meta_key 和 meta_value 存储 List 链表的信息,data_key 存储列表中的节点。

  • 集合结构存储:由 meta_key、meta_value 和 data_key、data_value 构成,meta_key 和 meta_value 存储 Set 集合的信息,data_key 存储集合中的成员。

  • 有序集合结构存储:由 meta_key、meta_value 和 data_key、data_value 构成,分别用于存储成员到分数和分数到成员的数据,实现有序排序。



通过这种方式,Pika 有效地实现了 Redis 的多稿袭种数据结构,并且基于 rocksdb 这个高性能的底层存储系统,提供了一个大容量、高效率的 Redis 存储服务。