0. 引言
最近因为公司中用到pika组件,于是将研究过程和理解进行系统记录,以供后续参考。
1. pika简介
pika是360开发的一款国产类redis的非关系型数据库,主要用来解决redis在大内存下产生的启动恢复时间长、一主多从代价大、缓存区容易写满等问题。适用于大数据量下的数据查询,比如日志、汇总数据、各种全量数据等。
需要注意的是pika是类redis的,也就意味着它兼容redis的大部分指令和客户端
其支持的客户端可以在github源码库中查看到,以java为例,比较常用的redis客户端jedis,redission都支持pika
源码库地址:https://github.com/OpenAtomFoundation/pika/wiki/%E6%94%AF%E6%8C%81%E7%9A%84%E8%AF%AD%E8%A8%80%E5%92%8C%E5%AE%A2%E6%88%B7%E7%AB%AF
这就意味着,对于pika的客户端对接和使用,可以直接参考redis
pika和redis一样,同样支持5种数据类型string、hash、list、set、zset。针对各数据结构的指令支持情况可见下图
更多可见官方对pika 支持的redis接口及兼容情况的描述
https://github.com/OpenAtomFoundation/pika/wiki/pika-%E6%94%AF%E6%8C%81%E7%9A%84redis%E6%8E%A5%E5%8F%A3%E5%8F%8A%E5%85%BC%E5%AE%B9%E6%83%85%E5%86%B5
pika特性
- 协议兼容:完全兼容 Redis 协议,且极力追求高性能、大容量、低成本、大规模
- 数据结构:支持 Redis 的常用数据结构 String、Hash、List、Zset、Set、Geo、Hyperloglog、Pubsub、Bitmap、Stream、ACL etc
- 冷热数据:对热数据做缓存,将全量数据持久化存储到 RocksDB,并且实现冷热分级存储
- 极大容量:相比于 Redis 的内存存储方式,Pika 支持百 GB 的数据量级,能极大减少服务器资源占用,增强数据的可靠性
- 部署方式:单机主从模式(slaveof)和 Codis 集群模式,扩缩容简单
- 迁移简单:不用修改代码即可平滑从 Redis 迁移到 Pika
- 便于运维:完善的运维命令文档
2. pika安装
下面我们针对pika单机版的安装来进行详细叙述
1、下载安装包,这里我选择了3.5.3版本,tar.gz压缩版中只有一个pika执行文件,缺少配置文件和工具包,所以选择bz2版更加方便
下载地址
2、解压bz2格式的需要提前安装一个bzip2
工具
yum install -y bzip2
3、创建个路径用来安装pika, 然后解压安装包
mkdir /data/pika
tar -xvf pika-linux-x86_64-v3.5.3.tar.bz2
解压后可以看到有一个output路径
4、我们修改一下配置文件中的配置项
thread-num : 4 # 调整为cpu核数值
thread-pool-size : 12 # 一般该值为thread-num的1.5倍,这里我没有调整,直接使用的默认值
log-path : /data/pika/output/log/ # 日志文件路径,指定为绝对路径,防止因执行路径不同导致的文件变化
db-path : /data/pika/output/db/ # 数据文件路径,指定为绝对路径,防止因执行路径不同导致的文件变化
pika中的各配置项,可以参加官方说明
https://github.com/OpenAtomFoundation/pika/wiki/pika-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E
同时pika的相关参数调优可以参考https://github.com/OpenAtomFoundation/pika/discussions/1970?sort=old
5、可以通过如下指令手动启动pika
./output/bin/pika -c ./output/conf/pika.conf
可以用各类redis客户端对pika进行连接测试
至此,pika就安装成功了,但在服务器中运行时,为了防止断电、重启等导致的宕机,我们还要设置pika的开机自启
3. pika设置开机自启
1、创建pika.service文件
vi /usr/lib/systemd/system/pika.service
并编辑内容
[Unit]
Description=pika server
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/data/pika/output
ExecStart=/data/pika/output/bin/pika -c /data/pika/output/conf/pika.conf
Restart=always
[Install]
WantedBy=multi-user.target
2、创建pika.service.d目录
mkdir /etc/systemd/system/pika.service.d
创建limit.conf文件
cat > /etc/systemd/system/pika.service.d/limit.conf <<EOF
# If you need to change max open file limit
# for example, when you change maxclient in configuration
# you can change the LimitNOFILE value below
# see "man systemd.exec" for information
[Service]
LimitNOFILE=65536
EOF
3、最后因为要后台启动pika, 我们还需要修改pika中的配置项
vi /data/pika/output/conf/pika.conf
将daemonize
设置为yes,即让pika允许后台启动
4、接下来就可以通过systemctl指令启动、停止pika服务了
# 停止
systemctl stop pika
# 启动
systemctl start pika
# 重启
systemctl restart pika
# 检查启动状态
systemctl status pika
5、添加到开机自启
systemctl enable pika
6、如果启动过程有问题,可以查看output/log下的日志文件进行排查
总结
至此pika安装就完成了,下节我们来看看如何在java项目中集成pika